Pular para o conteúdo

Docker Swarm: Cluster para Alta Disponibilidade e Failover

O Docker Swarm é uma solução nativa de orquestração de contêineres que permite criar clusters com alta disponibilidade, balanceamento de carga e tolerância a falhas. Neste laboratório, veremos como implantar um cluster Docker Swarm utilizando três nós e distribuir serviços automaticamente entre eles.

Arquitetura do Cluster Docker Swarm

Em um ambiente de produção, no qual há a necessidade de Alta Disponibilidade e Tolerância a Falhas, é essencial adotar uma solução para gerenciar e dimensionar contêineres. A opção mais comumente escolhida por profissionais é o Kubernetes, utilizado por provedores como IBM Cloud, AWS, Azure e Google Cloud para orquestração de contêineres em larga escala.

Neste guia, optei por uma solução simples: o Docker Swarm. Nele, os nós podem ser divididos em dois tipos principais: gerenciadores (managers) e trabalhadores (workers).

  • Gerenciadores (Managers): São os nós responsáveis pela gestão e coordenação do cluster. Eles mantêm o estado atual do serviço e orquestram a distribuição de tarefas entre os nós trabalhadores.
  • Trabalhadores (Workers): São os nós que executam as tarefas atribuídas pelos gerenciadores e hospedam os contêineres dos serviços.

Laboratório Docker Swarm

Neste laboratório, iremos criar um cluster Docker Swarm no Play with Docker com apenas três nós.

  • Nó 1: Manager → 192.168.0.8
  • Nó 2: Worker → 192.168.0.7
  • Nó 3: Worker → 192.168.0.6

1. Acesse o Play with Docker e faça login utilizando sua conta Docker Hub.

2. Clique três vezes em Add New Instance.

3. Acesse o nó 1 e inicialize o cluster Docker Swarm:

docker swarm init --advertise-addr eth0
Inicialização de cluster Docker Swarm

4. Após executar o comando, será exibido um comando de ingresso para os workers.

docker swarm join --token SWMTKN-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.8:2377

Explicação:

  • docker swarm join: adiciona um nó ao cluster.
  • --token: token de autenticação.
  • 192.168.0.8:2377: endereço do manager.

5. Execute o comando anterior nos nós 2 e 3.

Worker ingressando no cluster Docker Swarm
Segundo worker ingressando no cluster Docker Swarm

6. Verifique os nós do cluster:

docker node ls
Listagem de nós Docker Swarm

Observe que o nó 1 possui o papel de Leader e coordena o cluster.

7. Crie um serviço NGINX com duas réplicas:

docker service create --detach=true --name nginx1 --publish 80:80 --mount source=/etc/hostname,target=/usr/share/nginx/html/index.html,type=bind,ro --replicas 2 nginx:1.12
Serviço NGINX distribuído no Docker Swarm

O Swarm distribui automaticamente as réplicas pelos nós disponíveis.

Vantagens do Docker Swarm

  • Alta disponibilidade.
  • Balanceamento de carga integrado.
  • Escalabilidade horizontal.
  • Facilidade de administração.
  • Integração nativa com Docker Engine.

8. Teste o serviço:

curl localhost:80
Teste de balanceamento de carga Docker Swarm

A malha de roteamento do Docker Swarm encaminha automaticamente as requisições para uma réplica disponível do serviço.

Conclusão

O Docker Swarm fornece uma maneira simples de implementar alta disponibilidade, balanceamento de carga e tolerância a falhas utilizando poucos comandos. Para laboratórios, pequenas equipes e ambientes que priorizam simplicidade operacional, continua sendo uma alternativa relevante ao Kubernetes.

Hercílio Simões

Hercílio Simões

Software Engineer, formado em Ciência da Computação e Redes de Computadores e certificado AWS Cloud Practitioner. Possui experiência em desenvolvimento de aplicações web, APIs, microsserviços, AWS, CI/CD e bancos de dados SQL e NoSQL.

Compartilha neste blog conteúdos sobre desenvolvimento de software, cloud computing, AWS e engenharia de software.