Promoção de worker para manager no Docker Swarm | Swarm | Docker
- Promoção de worker para manager no Docker Swarm | Swarm | Docker
No Docker Swarm, um node pode atuar como:
| Papel | Função |
|---|---|
worker | Executa containers/tasks |
manager | Gerencia o cluster, participa do Raft, agenda tasks e pode virar leader |
Promover um worker para manager significa permitir que aquela máquina participe do controle do cluster.
Quando promover um worker para manager
Você deve promover um worker quando precisar aumentar a tolerância a falhas do Swarm.
Exemplo ruim:
1 manager
1 worker
Se o único manager morrer:
o worker não vira leader
não existe eleição
o Swarm perde gerenciamento
Exemplo melhor:
3 managers
N workers
Se um manager morrer:
os managers restantes elegem um novo leader
o cluster continua gerenciável
Verificar os nodes atuais
No manager atual, rode:
docker node ls
Exemplo:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
abc123 manager-1 Ready Active Leader
def456 worker-1 Ready Active
Nesse exemplo:
| Node | Papel |
|---|---|
manager-1 | Manager líder |
worker-1 | Worker |
Promover worker para manager
No node que já é manager, execute:
docker node promote worker-1
Ou usando o ID do node:
docker node promote def456
Depois valide:
docker node ls
Saída esperada:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
abc123 manager-1 Ready Active Leader
def456 worker-1 Ready Active Reachable
Agora o worker-1 virou manager.
Entendendo o status Reachable
Depois da promoção, o novo manager normalmente aparece como:
Reachable
Isso significa:
o node é manager
está acessível
participa do quorum
pode virar leader se necessário
O leader atual continua sendo o mesmo, a menos que haja uma nova eleição.
Antes e depois da promoção
Antes:
manager-1 -> Leader
worker-1 -> Worker
Depois:
manager-1 -> Leader
worker-1 -> Reachable
Agora você tem:
2 managers
0 workers
Ou seja: a máquina promovida deixou de ser apenas worker e passou a fazer parte do plano de controle.
Atenção com 2 managers
Ter 2 managers não é uma boa configuração de alta disponibilidade.
Com 2 managers:
quorum necessário = 2
Se qualquer um morrer:
sobra 1 manager
não há quorum
não há eleição válida
Por isso, o ideal é ter número ímpar de managers.
| Managers | Quorum | Pode perder |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
O padrão mais comum para produção pequena é:
3 managers
Adicionar mais um manager novo
Se você já promoveu seu worker e ficou com 2 managers, adicione uma terceira máquina como manager.
No manager atual, gere o token:
docker swarm join-token manager
O Docker vai retornar um comando parecido com:
docker swarm join \
--token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxx \
10.0.0.10:2377
Na terceira máquina, execute exatamente o comando retornado:
docker swarm join \
--token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxx \
10.0.0.10:2377
Depois confira:
docker node ls
Resultado esperado:
HOSTNAME STATUS AVAILABILITY MANAGER STATUS
manager-1 Ready Active Leader
manager-2 Ready Active Reachable
manager-3 Ready Active Reachable
Portas necessárias entre os nodes
Para o manager conseguir se comunicar corretamente com os outros nodes, libere as portas internas do Swarm entre as máquinas.
| Porta | Protocolo | Uso |
|---|---|---|
2377 | TCP | Gerenciamento do Swarm |
7946 | TCP/UDP | Comunicação entre nodes |
4789 | UDP | Rede overlay/VXLAN |
Exemplo com UFW, liberando por IP interno:
sudo ufw allow from 10.0.0.11 to any port 2377 proto tcp
sudo ufw allow from 10.0.0.11 to any port 7946 proto tcp
sudo ufw allow from 10.0.0.11 to any port 7946 proto udp
sudo ufw allow from 10.0.0.11 to any port 4789 proto udp
Repita para cada node do cluster.
Verificar se o node virou manager
Use:
docker node ls
Procure a coluna:
MANAGER STATUS
Possíveis valores:
| Valor | Significado |
|---|---|
Leader | Manager líder atual |
Reachable | Manager saudável e disponível |
Unreachable | Manager inacessível |
| vazio | Worker |
Exemplo:
HOSTNAME STATUS AVAILABILITY MANAGER STATUS
manager-1 Ready Active Leader
manager-2 Ready Active Reachable
worker-1 Ready Active
Nesse caso:
| Node | Papel |
|---|---|
manager-1 | Manager líder |
manager-2 | Manager secundário |
worker-1 | Worker |
Demover manager para worker
Caso você precise voltar um manager para worker:
docker node demote nome-do-node
Exemplo:
docker node demote manager-2
Depois confira:
docker node ls
O campo MANAGER STATUS deve ficar vazio para aquele node.
Diferença entre promote e join-token manager
Existem duas formas de ter mais managers:
| Comando | Quando usar |
|---|---|
docker node promote | Quando a máquina já está no cluster como worker |
docker swarm join-token manager | Quando a máquina ainda não entrou no Swarm |
Exemplo:
Máquina já está no Swarm
docker node promote worker-1
Máquina ainda não está no Swarm
No manager atual:
docker swarm join-token manager
Na nova máquina:
docker swarm join --token TOKEN IP_DO_MANAGER:2377
Checklist prático
1. Ver nodes atuais
docker node ls
2. Promover worker existente
docker node promote worker-1
3. Validar status
docker node ls
Esperado:
worker-1 Ready Active Reachable
4. Adicionar terceiro manager
docker swarm join-token manager
Na terceira máquina:
docker swarm join --token TOKEN IP_DO_MANAGER:2377
5. Validar cluster final
docker node ls
Esperado:
manager-1 Leader
manager-2 Reachable
manager-3 Reachable
Recomendação para produção
Evite:
1 manager + 1 worker
Também evite:
2 managers
Prefira:
3 managers
N workers
Para seu caso, o desenho mínimo mais seguro seria:
manager-1 -> Leader
manager-2 -> Reachable
manager-3 -> Reachable
worker-1 -> Worker, opcional
Com 3 managers, se o leader morrer:
um dos Reachable vira Leader
o cluster mantém quorum
o Swarm continua gerenciável