Se presenta Docker 1.12 Servicios. Se puede crear fácilmente un servicio replicado, distribuido y con equilibrio de carga utilizando docker service create
comando. Se proporciona un "estado deseado" de la aplicación, como ejecutar 3 contenedores de Couchbase, y el motor Docker de autorreparación garantiza que muchos contenedores se estén ejecutando en el clúster. Si un contenedor se cae, se inicia otro.
Si un nodo se cae, los contenedores de ese nodo se inician en un nodo diferente. Este blog mostrará cómo configurar un cluster de Couchbase usando Docker Services. Muchas gracias a @marcosnilsotro compañero Capitán Docker,
para ayudarme a depurar la red.
Clúster Couchbase
Un cluster de Couchbase Servers se despliega típicamente en servidores commodity. Couchbase Server tiene una topología peer-to-peer donde todos los nodos son iguales y se comunican entre sí bajo demanda. No existe el concepto de nodos maestros, nodos esclavos o nodos de configuración,
nodos de nombre, nodos de cabeza, etc., y todo el software cargado en cada nodo es idéntico. Permite añadir o eliminar nodos sin tener en cuenta su "tipo". Este modelo funciona especialmente bien con la infraestructura de nube en general.
- Iniciar Couchbase: Iniciar n servidores Couchbase
- Crear clúster: Elige cualquier servidor y añádele todos los demás servidores para crear el clúster.
- Reequilibrar el clúster: Reequilibrar el clúster para que los datos se distribuyan por todo el clúster.
ser accesible desde fuera del clúster.
Configurar el modo enjambre en Ubuntu
- Lanzar una instancia de Ubuntu en Amazon. Este blog utiliza
mx4.grande
tamaño para el AMI. - Instala Docker:
1rizo -sSL https://get.docker.com/ | sh - Modo Docker Swarm es una función opcional y debe activarse explícitamente. Inicializar el modo Enjambre:
1docker enjambre init
Crear servicio "maestro" de Couchbase
- Crear una red superpuesta:
1docker red crear -d superponer couchbase
Esto es necesario para que varios contenedores Docker de Couchbase en el clúster puedan comunicarse entre sí. - Crear un servicio "maestro":
1docker servicio crear --nombre couchbase-maestro -p 8091:8091 --réplicas 1 --red couchbase -e TIPO=MAESTRO arungupta/couchbase:enjambreEsta imagen se crea utilizando el archivo Dockerfile aquí. Este Dockerfile utiliza un script de configuración a
configura la imagen Docker base de Couchbase. En primer lugar, utiliza API REST de Couchbase para configurar la cuota de memoria, índice de configuración, datos y
servicios de consulta, credenciales de seguridad y carga un bucket de datos de muestra. A continuación, invoca los servicios Couchbase CLI para añadir el
Nodo Couchbase al cluster o añadir el nodo y reequilibrar el cluster. Esto se basa en tres variables de entorno:TIPO
: Define si el pod de unión es trabajador o maestroAMO_DEL_CAMA
: Nombre del servicio principalAUTO_REBALANCE
: Define si es necesario reequilibrar el clúster.
Para este primer archivo de configuración, la variable de entorno TYPE se establece en MASTER, por lo que no se realiza ninguna configuración adicional en la imagen de Couchbase.Este servicio también utiliza la red superpuesta creada anteriormente denominada
couchbase
. Expone el puerto 8091 que hace que el Consola web de Couchbase accesible fuera del cluster. Este servicio contiene solo una réplica del contenedor. - Comprueba el estado del servicio Docker:
123ubuntu@ip-172-31-26-234:~$ docker servicio lsID NOMBRE RÉPLICAS IMAGEN COMANDOcecl1rl5ecyr couchbase-maestro 1/1 arungupta/couchbase:enjambre
Muestra que el servicio está funcionando. El número "deseado" y "esperado" de réplicas es 1, por lo que coinciden.
- Compruebe las tareas del servicio:
123ubuntu@ip-172-31-26-234:~$ docker servicio ps couchbase-maestroID NOMBRE IMAGEN NODO DESEADO ESTADO ACTUAL ESTADO ERROR2xuw1h0jvantsgj9f8zuj03k8 couchbase-maestro.1 arungupta/couchbase:enjambre ip-172-31-26-234 Ejecutar Ejecutar 30 segundos hace
Esto muestra que el contenedor se está ejecutando.
- Accede a la Consola Web de Couchbase usando la dirección IP pública y debería verse así:
La imagen utilizada en el archivo de configuración se configura con la opciónAdministrador
nombre de usuario ycontraseña
contraseña. Introduzca las credenciales para ver la consola:
- Haz clic en Server Nodes para ver cuántos nodos Couchbase forman parte del cluster. Como era de esperar, sólo muestra un nodo:
Crear servicio "worker" Couchbase
- Crear servicio "trabajador":
1docker servicio crear --nombre couchbase-trabajador --réplicas 1 -e TIPO=TRABAJADOR -e AMO_DEL_CAMA=couchbase-maestro.couchbase --red couchbase arungupta/couchbase:enjambre
Esta RC también crea una única réplica de Couchbase utilizando la misma
arungupta/couchbase:enjambre
imagen. Las diferencias clave aquí son:TIPO
se establece enTRABAJADOR
. Esto añade un nodo Couchbase trabajador al cluster.AMO_DEL_CAMA
se le pasa el nombre del servicio maestro,couchbase-master.couchbase
en nuestro caso. Esto utiliza el mecanismo de descubrimiento de servicios incorporado en Docker para el trabajador y
al maestro para comunicarse.
- Comprueba el servicio:
1234ubuntu@ip-172-31-26-234:~$ docker servicio lsID NOMBRE RÉPLICAS IMAGEN COMANDOaw22g79o3u8z couchbase-trabajador 1/1 arungupta/couchbase:enjambrececl1rl5ecyr couchbase-maestro 1/1 arungupta/couchbase:enjambre - Comprobando la Consola Web de Couchbase se muestra la salida actualizada:
Muestra que un servidor está pendiente de ser reequilibrado.Durante la creación del servicio de trabajador,AUTO_REBALANCE
podría haberse establecido enverdadero
ofalso
a
active reequilibrar. Esto garantiza que el nodo sólo se añade al clúster, pero el clúster en sí no se reequilibra. Para reequilibrar el clúster es necesario
redistribuir los datos entre varios nodos del clúster. La forma recomendada es añadir varios nodos y, a continuación, reequilibrar manualmente el clúster mediante la consola web.
Añadir nodos Couchbase escalando el servicio Docker
- Ampliar el servicio:
1docker servicio escala couchbase-trabajador=2 - Comprueba el servicio:
1234ubuntu@ip-172-31-20-209:~$ docker servicio lsID NOMBRE RÉPLICAS IMAGEN COMANDO1k650zjrwz00 couchbase-maestro 1/1 arungupta/couchbase:enjambre5o1i4eckr9d3 couchbase-trabajador 2/2 arungupta/couchbase:enjambre
Esto muestra que se están ejecutando 2 réplicas del trabajador. - Compruebe la consola web de Couchbase:
Como era de esperar, ahora hay dos servidores añadidos en el clúster y pendientes de reequilibrio. - Opcionalmente, puede reequilibrar el clúster haciendo clic en el botón
Reequilibrar
y se mostrará como:
Una vez completado el reequilibrio, la Consola Web de Couchbase se actualiza como se muestra:
- Ver todos los contenedores en ejecución mediante
docker ps
:
12345ubuntu@ip-172-31-26-234:~$ docker psCONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRESa0d927f4a407 arungupta/couchbase:enjambre "/entrypoint.sh /opt/" 21 segundos hace Arriba 20 segundos 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp couchbase-trabajador.2.4ufdw5rbdcu87whgm94yfv9yk22bde7f6471c arungupta/couchbase:enjambre "/entrypoint.sh /opt/" 2 minutos hace Arriba 2 minutos 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp couchbase-trabajador.1.f22c2gghu88bnbjl5ko1wlru5f97e8bc091c3 arungupta/couchbase:enjambre "/entrypoint.sh /opt/" 7 minutos hace Arriba 7 minutos 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp couchbase-maestro.1.2xuw1h0jvantsgj9f8zuj03k8
Además de crear un clúster, Couchbase Server admite una serie de alta disponibilidad y recuperación en caso de catástrofe (HA/DR). La mayoría de las estrategias de HA/DR
se basan en un enfoque múltiple para maximizar la disponibilidad, aumentar la redundancia dentro de los centros de datos y entre ellos, y realizar copias de seguridad periódicas. Ahora que tu cluster de Couchbase está listo, puedes ejecutar tu primer solicitud de muestra.
Más información sobre Couchbase y contenedores:
- Couchbase en contenedores
- Síguenos en @couchbasedev o @couchbase
- Haga preguntas sobre Foros de Couchbase
Hola,
gracias por la guía y couchbase :)
Estoy probando esta solución en mi enjambre. Mi objetivo es NO utilizar volúmenes persistentes y estar seguro de que al menos 1 contenedor está preservando los datos para que las otras instancias puedan recuperar sus datos por ellos. Con su solución parece faseable, pero, ¿cómo puedo almacenar la configuración de todos los nodos? Tengo que pasar un fichero ini a cada uno, ¿no? ¿Puedo establecer la contraseña u otra configuración en el arranque mediante variables de entorno?