Es bastante sencillo ejecutar una instancia de Couchbase Server en un contenedor Docker. Se necesita un poco más de trabajo para establecer y configurar completamente un clúster. En este post, voy a caminar a través de un script de shell que escribí para automatizar el proceso.
Fondo
Para Couchbase Connect 2017, construimos una aplicación que muestra todo, desde el Servicio de análisis Couchbase hasta la sincronización de datos móviles en tiempo real mediante Couchbase Móvil. Utilizamos un parche sensor de temperatura NFC, generamos alertas a través del cliente web basado en Vue.js, alteramos esquemas sobre la marcha, enviamos notificaciones push, fallamos sobre clústeres y mucho más. Echa un vistazo a este vídeo en acción.
En la demo, Servidor Couchbase, Pasarela de sincronizacióny el backend web se ejecutan en la nube. Estamos trabajando para liberar el código de todo el proyecto. Como parte de eso, quiero ser capaz de ejecutar una versión recortada en una sola máquina.
Eso significa, idealmente, ejecutar dos clústeres de Couchbase Server, Sync Gateway, y la aplicación backend Node.js, todo simultáneamente.
Docker hace que ejecutar instancias separadas de Couchbase sea bastante fácil. Sin embargo, configurar completamente un clúster requiere algo de trabajo. Ahí es donde entra el script que escribí.
Un script flexible para la creación de clústeres
El script está escrito usando Bash. Tenía algunos objetivos en mente mientras lo desarrollaba:
- Haga algo de uso general y fácil de usar.
- Permiten una configuración flexible, al tiempo que recuperan los valores predeterminados.
- Minimizar las dependencias a Bash, utilidades estándar comunes (algunas cosas sólo vale la pena hacerlas en awk), y el cli de Docker.
He publicado el código y otras piezas relacionadas en Github en este gist. Aquí está el script de formación del cluster.
https://gist.github.com/HodGreeley/fa88c74baf55115ef83135d4d069e796#file-server
Esquema
A grandes rasgos, por orden, el script se encarga de lo siguiente:
- Configuración de parámetros
- Iniciar el número solicitado de instancias de Couchbase Server, una por contenedor Docker, utilizando la última imagen de producción.
- Asignación de los puertos necesarios (compensando cada instancia para evitar colisiones)
- Configuración de la cuenta y la contraseña administrativas
- Seleccionar los servicios disponibles y establecer las asignaciones de memoria para ellos.
- Crear un cubo
- Concesión de derechos a una cuenta de cliente mediante RBAC
- Combinar los nodos en un clúster
- Reequilibrio del clúster final
No voy a repasar el guión en detalle. Hay comentarios que indican qué sección corresponde al esquema. No dudes en dejar un comentario aquí o en Github si tienes preguntas.
Utilización
Escribí esto para configurar clusters en mi Mac. Espero que funcione igual de bien en cualquier máquina que pueda ejecutar Bash y Docker. El script no tiene opciones. Todo se controla suministrando parámetros como pares clave/valor. Se suministran de cuatro maneras. En orden de prioridad, de menor a mayor,
- Valores por defecto (escritos en el propio script)
- Variables de entorno existentes
- Líneas alimentadas a la entrada estándar
- Se suministran como argumentos de línea de comandos
En los dos últimos casos, los parámetros se suministran de la misma forma que se definiría una variable de entorno. Por ejemplo, para solicitar 3 nodos, añada COUCHBASE_NODE_COUNT=3
ya sea en la línea de comandos o redirigido desde un archivo. Mira dónde se establecen los valores predeterminados para ver lo que puedes controlar.
El mapeo de puertos requiere una pequeña explicación. Couchbase utiliza varios rangos de puertos. Para crear un cluster, un número de puertos tienen que ser expuestos por Docker y mapeados a puertos abiertos en la máquina anfitriona. Para hacer esto, especifica bloques de rangos y mapeos, separados por dos puntos (::
). Por ejemplo, estableciendo COUCHBASE_SERVER_PORTS="9091-9094:8091-8094::12210:11210
asigna los puertos estándar de Couchbase 8091-8094 y 11210 a los puertos de la máquina host 9091-9094 y 12210, respectivamente.
Ejemplo
En un escenario típico, podrías tener la información de la cuenta del administrador del cluster asignada en variables de entorno. Por ejemplo
1 2 |
exportar COUCHBASE_ADMINISTRATOR_USERNAME=Administrador exportar COUCHBASE_ADMINISTRATOR_PASSWORD=contraseña |
A continuación, puede guardar otra información de configuración general en un archivo. El nombre no importa. Aquí hay uno que yo uso que llamo london-cluster
1 2 3 4 5 6 7 8 |
NOMBRE_NODO_COUCHBASE=londres COUCHBASE_CLUSTER_NAME=londres-grupo CUBO_CAMA=salud COUCHBASE_RBAC_USERNAME=admin COUCHBASE_RBAC_PASSWORD=contraseña COUCHBASE_RBAC_NAME='J. D. User ROLES_RBAC_BASE_SOFÁ=Admin COUCHBASE_SERVER_PORTS="11091-11094:8091-8094::14210:11210" |
Por último, para iniciar el clúster, invocarías algo como lo siguiente en la línea de comandos.
1 |
$ ./servidor RECUENTO DE NODOS BASE=3 < londres-grupo |
Guiones relacionados
En el gist también puedes encontrar un script similar para configurar Sync Gateway. Ese script está un poco más construido en términos de tener comandos para crear un contenedor, iniciarlo, detenerlo y eliminarlo. Debido a que Sync Gateway requiere un archivo de configuración, el script tiene que trabajar un poco más para hacer las sustituciones de parámetros. Por lo demás, es similar pero más simple que el script del servidor.
También hay un script que configura toda la demo, incluyendo el uso de los dos scripts anteriores. Como he mencionado antes, estamos trabajando para liberar el código de toda la aplicación de extremo a extremo. El script de configuración da una idea de lo que implica.
Posdata
Couchbase es de código abierto y probar gratis.
Empezar con código de ejemplo, consultas de ejemplo, tutoriales y mucho más.
Más recursos en nuestra portal para desarrolladores.
Síguenos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros.
Participamos activamente en Stack Overflow.
Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley