Esta entrada del blog explicará cómo crear y escalar un clúster Couchbase utilizando la armadura completa de Docker - Docker Machine, Docker Swarm y Docker Compose. Esto es lo que haremos:
- Crear un clúster Docker Swarm de 3 nodos utilizando Docker Machine
- Ejecutar una instancia de Couchbase en dos nodos
- Crear un clúster
- Reequilibrar el clúster
- Escalar y reequilibrar de nuevo el clúster

Clúster Docker Swarm usando Consul
Cree un clúster Docker Swarm de tres nodos utilizando Docker Machine:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# Docker Machine for Consul docker-machine create -d virtualbox consul-machine # Start Consul docker $(docker-machine config consul-machine) run -d --restart=always -p "8500:8500" -h "consul" progrium/consul -server -bootstrap # Docker Swarm master docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-master # Docker Swarm node-01 docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-01 # Docker Swarm node-02 docker-machine create -d virtualbox --virtualbox-disk-size "5000" --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-02 # Configure to use Docker Swarm cluster eval "$(docker-machine env --swarm swarm-master)" |
Aprovisionar un clúster Swarm con Docker Machine proporcionan más detalles sobre por qué y qué se hace en este script. He aquí un resumen:
- Crear una máquina Docker y ejecutar Consul para el descubrimiento de servicios
- Cree tres máquinas Docker: una para el nodo maestro y dos para los nodos de trabajo. Cada máquina se configura para formar parte de un clúster Swarm utilizando
--swarm. También utiliza el descubrimiento de servicios Consul especificado mediante--swarm-discovery.
Nodos Couchbase en Docker Swarm
Crea dos instancias de Couchbase usando Docker Compose:
|
1 2 3 4 5 6 7 8 9 10 |
version: "2" services: db: image: arungupta/couchbase network_mode: "host" ports: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
arungupta/couchbase se utiliza aquí. Esta imagen se define en Imagen Docker de Couchbase. Utiliza el Imagen Docker oficial de Couchbase añada
lo configura como se ha explicado:
- Configura la memoria para índice y datos
- Configura el servidor Couchbase con el servicio de índices, datos y consultas.
- Establece las credenciales de nombre de usuario y contraseña
- Carga el
viaje-muestracubo
El archivo Compose utiliza host red. Esto equivale a utilizar --net=host en docker run CLI. Permite que el contenedor utilice la pila de red del host. También limita la ejecución de un único contenedor Couchbase en
una sola máquina Docker. Esto significa que nuestro cluster Couchbase puede escalar basado en el número de máquinas Docker - 3 en nuestro caso. El comando exacto para usar este archivo Compose es:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
docker-compose scale db=2 WARNING: The "db" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Creating and starting couchbasedockerswarm_db_1 ... Creating and starting couchbasedockerswarm_db_2 ... Pulling db (arungupta/couchbase:latest)... swarm-node-02: Pulling arungupta/couchbase:latest... swarm-master: Pulling arungupta/couchbase:latest... swarm-node-01: Pulling arungupta/couchbase:latest... Pulling db (arungupta/couchbase:latest)... swarm-node-02: Pulling arungupta/couchbase:latest... : downloaded Creating and starting couchbasedockerswarm_db_1 ... done Creating and starting couchbasedockerswarm_db_2 ... done |
Hay tres nodos en el clúster Docker Swarm. El estrategia de programación por defecto es difundir por lo que los contenedores estarán repartidos en diferentes hosts. Esto es evidente
por docker ps:
|
1 2 3 4 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c8c149f4e34 arungupta/couchbase "/entrypoint.sh /opt/" 44 seconds ago Up 44 seconds swarm-node-02/couchbasedockerswarm_db_1 d3b6a1dbddb5 arungupta/couchbase "/entrypoint.sh /opt/" 44 seconds ago Up 44 seconds swarm-node-01/couchbasedockerswarm_db_2 |
Tenga en cuenta que un servidor Couchbase se ejecuta en nodo-enjambre-01 y otro en enjambre-nodo-02. Cada servidor está configurado con un nombre de usuario de administrador Administrador y contraseña contraseña. Descubra IP
dirección de la máquina Docker:
|
1 2 3 4 5 6 7 |
docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS consul-machine - virtualbox Running tcp://192.168.99.106:2376 v1.11.1 default - virtualbox Running tcp://192.168.99.100:2376 v1.11.0 swarm-master * (swarm) virtualbox Running tcp://192.168.99.107:2376 swarm-master (master) v1.11.1 swarm-node-01 - virtualbox Running tcp://192.168.99.108:2376 swarm-master v1.11.1 swarm-node-02 - virtualbox Running tcp://192.168.99.109:2376 swarm-master v1.11.1 |
Si tiene jq instalado entonces la dirección IP se puede encontrar convenientemente como:
|
1 2 |
docker-machine inspect swarm-node-01 | jq ".Driver.IPAddress" "192.168.99.108" |
Clúster Couchbase en Docker Swarm
Todos los nodos del servidor Couchbase son iguales. Esto permite al cluster de Couchbase escalar horizontalmente para satisfacer las crecientes demandas de tu aplicación. Se pueden añadir nodos Couchbase independientes a un cluster invocando el comando servidor-add comando CLI. Normalmente, este proceso consta de dos pasos. El primer paso es añadir uno o más nodos. El segundo paso reequilibra el cluster donde los datos en los nodos existentes se reequilibran a través del cluster actualizado. En nuestro caso, un único Couchbase
se está ejecutando en cada máquina Docker. Vamos a elegir la dirección IP de cualquier nodo Couchbase, y añadir la dirección IP del otro nodo:
|
1 2 3 4 5 6 7 8 9 10 |
docker run -it arungupta/couchbase couchbase-cli server-add --cluster=`docker-machine inspect swarm-node-01 | jq -r ".Driver.IPAddress"`:8091 --user Administrator --password password --server-add=`docker-machine inspect swarm-node-02 | jq -r ".Driver.IPAddress"` --server-add-username=Administrator --server-add-password=password SUCCESS: server-add 192.168.99.109:8091 |
Couchbase Web Console para ambos nodos mostrará una salida similar:


Esto muestra que los dos nodos forman ahora un cluster, y necesita ser reequilibrado.
Reequilibrio del clúster Couchbase
Ahora, vamos a reequilibrar el clúster:
|
1 2 3 |
docker run -it arungupta/couchbase couchbase-cli rebalance --cluster=`docker-machine inspect swarm-node-01 | jq -r ".Driver.IPAddress"`:8091 --user Administrator --password password INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SUCCESS: rebalanced cluster |
Couchbase Web Console se actualizará para mostrar que el reequilibrio está ocurriendo:

Y finalmente verás un clúster reequilibrado:
Escalar y reequilibrar el clúster Couchbase
Escalar el clúster Couchbase:
|
1 2 3 |
docker-compose scale db=3 WARNING: The "db" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Creating and starting couchbasedockerswarm_db_3 ... done |
Compruebe que el contenedor se está ejecutando en una máquina Docker diferente:
|
1 2 3 4 5 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 02f94e2bbd3e arungupta/couchbase "/entrypoint.sh /opt/" 9 seconds ago Up 8 seconds swarm-master/couchbasedockerswarm_db_3 4c8c149f4e34 arungupta/couchbase "/entrypoint.sh /opt/" About an hour ago Up About an hour swarm-node-02/couchbasedockerswarm_db_1 d3b6a1dbddb5 arungupta/couchbase "/entrypoint.sh /opt/" About an hour ago Up About an hour swarm-node-01/couchbasedockerswarm_db_2 |
Como se mencionó anteriormente, escalar un cluster de Couchbase es un proceso de dos pasos. Esto es así porque normalmente añadirás múltiples servidores y luego reequilibrarás el cluster. Sin embargo, en casos donde solo necesitas añadir un solo nodo Couchbase y luego rebalancear,
se puede utilizar el comando de reequilibrio para conseguirlo. En nuestro caso, esto se hace como se muestra:
|
1 2 3 4 |
docker run -it arungupta/couchbase couchbase-cli rebalance --cluster=`docker-machine inspect swarm-node-01 | jq -r ".Driver.IPAddress"`:8091 --user Administrator --password password --server-add=`docker-machine inspect swarm-master | jq -r ".Driver.IPAddress"` --server-add-username=Administrator --server-add-password=password SUCCESS: server-add 192.168.99.107:8091 INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SUCCESS: rebalanced cluster |
El clúster reequilibrado tiene ahora este aspecto:

Este blog muestra cómo se puede crear y escalar fácilmente un clúster Couchbase utilizando Docker Swarm, Machine y Compose. ¡Que lo disfrutes! Lectura adicional ...
