Esta postagem do blog explicará como criar e dimensionar um cluster do Couchbase usando a armadura completa do Docker - Docker Machine, Docker Swarm e Docker Compose. Aqui está o que faremos:
- Criar um cluster Docker Swarm de 3 nós usando o Docker Machine
- Executar uma instância do Couchbase em dois nós
- Criar um cluster
- Reequilibrar o cluster
- Dimensionar e reequilibrar o cluster novamente

Cluster do Docker Swarm usando o Consul
Crie um cluster do Docker Swarm de três nós usando o 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)" |
Provisione um cluster do Swarm com o Docker Machine fornecem mais detalhes sobre o porquê e o que é feito nesse script. Aqui está um resumo:
- Criar um Docker Machine e executar o Consul para descoberta de serviços
- Crie três Docker Machines - um para o Master e dois para os nós Worker. Cada máquina é configurada para fazer parte de um cluster Swarm usando
--swarm. Ele também usa a descoberta de serviço Consul especificada usando--swarm-discovery.
Nós do Couchbase no Docker Swarm
Crie duas instâncias do Couchbase usando o 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 é usada aqui. Essa imagem é definida em Imagem do Docker do Couchbase. Ele usa o Imagem oficial do Docker do Couchbase adicionar
o configura conforme explicado:
- Configura a memória para índice e dados
- Configura o servidor Couchbase com o serviço de índice, dados e consulta
- Configura as credenciais de nome de usuário e senha
- Carrega o
amostra de viagembalde
O arquivo de composição usa hospedeiro rede. Isso é equivalente a usar --net=host na CLI de execução do docker. Ele permite que o contêiner use a pilha de rede do host. Isso também limita a execução de apenas um único contêiner do Couchbase no
um único Docker Machine. Isso significa que o nosso cluster do Couchbase pode ser dimensionado com base no número de Docker Machines - 3 no nosso caso. O comando exato para usar esse arquivo Compose é:
|
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 |
Há três nós no cluster do Docker Swarm. O nó estratégia de agendamento padrão é propagação e, portanto, os contêineres serão distribuídos em diferentes hosts. Isso é 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 |
Observe que um servidor Couchbase está sendo executado em nó de enxame-01 e outro em nó de enxame-02. Cada servidor é configurado com um nome de usuário de administrador Administrador e senha senha. Descubra o IP
endereço do Docker Machine:
|
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 |
Se você tiver jq instalado então o endereço IP pode ser convenientemente encontrado como:
|
1 2 |
docker-machine inspect swarm-node-01 | jq ".Driver.IPAddress" "192.168.99.108" |
Cluster do Couchbase no Docker Swarm
Todos os nós do servidor Couchbase são criados iguais. Isso permite que o cluster do Couchbase seja realmente dimensionado horizontalmente para atender às demandas crescentes de seus aplicativos. Os nós do Couchbase em execução independente podem ser adicionados a um cluster invocando o comando adicionar servidor comando CLI. Normalmente, esse é um processo de duas etapas. A primeira etapa é adicionar um ou mais nós. A segunda etapa reequilibra o cluster em que os dados nos nós existentes são reequilibrados no cluster atualizado. No nosso caso, um único nó do Couchbase
está sendo executado em cada máquina Docker. Vamos escolher o endereço IP de qualquer nó do Couchbase e adicionar o endereço IP do outro nó:
|
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 |
O Console da Web do Couchbase para ambos os nós mostrará uma saída semelhante:


Isso mostra que os dois nós agora formam um cluster e precisam ser rebalanceados.
Rebalanceamento do cluster do Couchbase
Agora, vamos reequilibrar o cluster:
|
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 |
O Console da Web do Couchbase será atualizado para mostrar que o rebalanceamento está ocorrendo:

E, finalmente, você verá um cluster reequilibrado:
Dimensionar e reequilibrar o cluster do Couchbase
Dimensionar o cluster do 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 |
Verifique se o contêiner está sendo executado em um Docker Machine 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 |
Conforme mencionado anteriormente, o dimensionamento de um cluster do Couchbase é um processo de duas etapas. Isso ocorre porque, normalmente, você adiciona vários servidores e, em seguida, reequilibra o cluster. No entanto, nos casos em que você só precisa adicionar um único nó do Couchbase e depois fazer o rebalanceamento,
o comando rebalance pode ser usado para isso. Em nosso caso, isso é feito conforme mostrado:
|
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 |
O cluster reequilibrado agora tem a seguinte aparência:

Este blog mostrou como você pode criar e dimensionar facilmente um cluster do Couchbase usando o Docker Swarm, Machine e Compose. Aproveite! Leitura adicional ...
