Servidor Couchbase

Failover rápido con Couchbase Server 5.0

La conmutación rápida por error es una de las muchas mejoras que incorpora la versión de Servidor Couchbase 5.0 (ya disponible para descargar).

La conmutación por error es uno de los conceptos importantes que hay que entender cuando se trata de bases de datos distribuidas. El teorema CAP establece que una base de datos distribuida no puede estar disponible a la vez y coherente todos del tiempo. La arquitectura de Couchbase Server está diseñada para ser siempre consistente, y tolerar particiones. Con la rápida conmutación por error, Couchbase Server está cerrando la brecha en alta disponibilidad.

En esta entrada de blog, voy a demostrar la conmutación por error en acción. Usaré Docker para crear un clúster de 3 nodos Couchbase en mi máquina local.

Puedes seguir el ejemplo de código en esta entrada del blog: es disponible en GitHub.

Visión general de la conmutación rápida por error

Necesitarás un poco de preparación.

Primero, crea un cluster de 3 nodos (al menos) de Couchbase Server. Hay varias formas de hacerlo, incluyendo VagabundosMáquinas virtuales, máquinas reales, Azurey mucho más.

Opté por utilizar Docker. Ya escribí en el blog cómo crear un Cluster Couchbase en Docker y acceder a él con una aplicación .NET Core (¡no te olvides de la red de puentes!). Así que volví a seguir las mismas instrucciones. La única diferencia es que utilicé una aplicación de consola en lugar de una aplicación ASP.NET (sobre la que puedes leer más adelante en este post).

Three Couchbase Server nodes

Utilicé el Imagen Couchbase Server 5.0.0-beta2 de Docker Hubpero para cuando leas esto, la versión oficial de Couchbase Server 5.0 ya estará disponible. disponible en el repositorio oficial de docker Couchbase.

A continuación, cree un bucket llamado "mybucket". Asegúrate de habilitar las réplicas para crear copias adicionales de datos dentro del mismo clúster.

Couchbase Server bucket

Después de eso, crea un usuario (yo llamé al mío "myuser") con al menos permiso de Data Writer y Data Reader para "mybucket"). Si aún no está familiarizado con Couchbase Server Control de acceso basado en funciones (RBAC)empezar con esta entrada del blog sobre Autenticación con RBAC y .NET.

Couchbase Server user

Por último, activa la conmutación por error rápida automática. Desde la Consola de Couchbase, ve a Configuración, y luego a Auto-Failover. Marca la casilla "Activar auto-failover". A partir de la versión 5.0, puedes establecer el valor de Timeout a tan sólo 5 (segundos). Anteriormente, el valor tenía que ser de al menos 30 segundos.

Enable fast failover

Hay una razón por la que el auto-failover está desactivado por defecto. Por favor, revise la documentación sobre la conmutación automática por error para asegurarte de que te conviene.

Ejemplo .NET

Ahora que tienes un cluster de 3 nodos corriendo dentro de tu host Docker, es hora de escribir una aplicación de demostración. Decidí escribir una aplicación de consola que continuamente realizara lecturas contra Couchbase. En algún momento, "desconectaré" uno de los nodos para mostrar la conmutación rápida automática en acción.

Conexión al clúster

Después de crear una nueva aplicación de consola .NET Core en Visual Studio, añadí el archivo Couchbase .NET SDK (actualmente versión 2.5.1) usando NuGet.

A continuación, he creado una configuración para conectarse al clúster de 3 nodos, autenticar a "myuser", y abrir "mybucket".

Esas direcciones IP son las direcciones que interno al host Docker. Esta aplicación .NET Core también se ejecutará dentro del host Docker, donde se resolverán esas direcciones IP. Desde fuera de el host docker, sólo se resolverá "localhost:8091" (suponiendo que está siguiendo la etiqueta tutorial que he enlazado antes). Si no estás usando Docker, pon las direcciones IP de las máquinas Azure, las VMs, etc, en su lugar.

Siguiente, ContraseñaAutenticación para garantizar el acceso a los cubos.

Por último, obtenga un objeto cubo utilizando OpenBucket.

Creación de documentos

Para esta demostración, quiero crear un montón de documentos de los que luego leeré repetidamente. En primer lugar, escribí un bucle para crear un número arbitrario de documentos, que cada uno tiene una clave como "documentKey[num]" (por ejemplo, "documentKey1", "documentKey2", etc).

En mi código, númeroDocumentos está fijado en 50. Pero si usted está siguiendo a lo largo, no dude en establecer que a otro número y ver qué pasa.

Lectura de documentos

Por lo tanto, hay 50 documentos con claves conocidas. El resto del programa será un bucle continuo. Cada iteración del bucle intentará recuperar los 50 documentos.

En primer lugar, observa que hay un bucle dentro del bucle. El bucle interior se ejecutará 50 veces para realizar un Visite en cada documento. MostrarResultado mostrará lo que ocurre en la consola (MostrarResultadoTerse hace lo mismo, pero de forma mucho más compacta. MostrarResultado está más abajo, pero en las capturas de pantalla posteriores se utilizará MostrarResultadoTerse).

Los comentarios le ayudarán a seguir el hilo, pero MostrarResultado hace tres comprobaciones:

  1. ¿Ha tenido éxito la lectura? Si es así, indícalo. ¡Listo! Si no...
  2. Intenta obtener una réplica (de otro nodo). ¿Tuvo éxito? Si es así, envíalo. ¡Listo! Si no...
  3. La aplicación no ha podido leer el documento o una de sus réplicas. En este ejemplo, esto va a ser muy raro. En realidad, podría significar que el documento no existe, o que la replicación no está configurada correctamente, o que algo más ha ido mal.

Entonces, estás listo para ejecutar la aplicación. Si estás usando Docker, no olvides ejecutar esta aplicación en Docker (que es fácil de hacer desde Visual Studio). (Asegúrese también de conectar el contenedor de aplicaciones .NET Core a la red puente de Docker).

¡Tira del enchufe!

Antes de desconectar uno de los nodos, veamos cuál es la salida "normal" cuando se ejecuta la aplicación .NET Core anterior.

En el siguiente GIF, lo verás:

  • Un clúster de tres nodos de Couchbase Server
  • Cambiar a Visual Studio
  • Cree e inicie el contenedor Docker con CTRL+F5
  • La (escueta) salida de consola del contenedor Docker

Console output from Docker

(He acelerado un poco la animación). Observe que "S" se muestra 50 veces. Esto significa que cada documento ha sido recuperado con éxito.

A continuación, vamos a mostrar la conmutación rápida por error en acción. Voy a "desconectar" uno de los nodos. Con Docker, puedo ejecutar docker stop db2por ejemplo.

Hay mucho que controlar a la vez, así que he creado un breve vídeo que muestra lo que ocurre.

[youtube https://www.youtube.com/watch?v=KbU5eG2R9XU&w=700&h=394]

Lo que estás viendo en ese video es:

  1. Funcionamiento normal (todas las "S" de éxito)
  2. Un nodo detenido (con Docker)
  3. Couchbase detecta que un nodo está caído.
  4. Couchbase iniciando fast failover para activar réplicas.
  5. Durante ese periodo de conmutación por error, ya no es todo "S". También hay algunas "R" de réplicas (que son de sólo lectura).
  6. Cuando finaliza la conmutación por error, los resultados vuelven a ser todos "S".

El objetivo de la conmutación rápida es reducir el periodo de tiempo en el que no todos los documentos están totalmente disponibles.

Resumen

Couchbase Server 5.0 ha mejorado la conmutación por error con una opción de "conmutación por error rápida" que puede ser útil para entornos con redes sólidas.

Esta entrada de blog muestra una aplicación de consola que pretende demostrar la conmutación por error rápida. No es una aplicación muy útil fuera de eso, pero puede tomar los principios y aplicarlos a un sitio web ASP.NET o ASP.NET Core.

Echa un vistazo Servidor Couchbase 5.0 hoy mismo para disfrutar de esta y otras fantásticas novedades.

Un agradecimiento especial a Jeff Morris y al equipo del SDK por ayudarnos con esta entrada del blog.

Aquí tienes algunos enlaces para obtener más información sobre la conmutación rápida por error:

Si tiene preguntas o comentarios sobre la conmutación por error, no deje de consultar el Foros de Couchbase.

Por favor, deja tus preguntas y comentarios sobre todo lo relacionado con .NET y Couchbase o encuéntrame en Twitter @mgroves.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Author

Posted by Matthew Groves

Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.