ULC Lab · implementação reproduzível
Laboratório: Cluster de Alta Disponibilidade com Pacemaker e Corosync para Serviço Apache HTTPD
Você terá um cluster de alta disponibilidade funcional, capaz de manter o serviço Apache HTTPD disponível mesmo após falha de um nó. Tempo estimado: 2 a 3 horas.

- Duração estimada
- 120 min
- Passos
- 13
- Validações
- 4
- Versões da documentação consultada
- Pacemaker a versão estável atual · Corosync a versão estável atual · Apache HTTPD a versão estável atual · crmsh a versão estável atual
O objetivo é construir, do zero, um cluster de alta disponibilidade usando Pacemaker e Corosync, protegendo um serviço Apache HTTPD. Você vai entender como os componentes se integram, como configurar o cluster, adicionar recursos e simular falhas para validar a resiliência. O laboratório é executável em máquinas virtuais comuns, sem necessidade de hardware dedicado.
Topologia
Dois nós Linux (node1 e node2) conectados em rede privada (192.168.56.0/24). Ambos acessam um endereço IP virtual (192.168.56.100) que será migrado automaticamente em caso de falha. O serviço Apache HTTPD será protegido pelo cluster.
+-------------------+
| Cliente/Teste |
+--------+--------+
|
192.168.56.100 (IP Virtual)
|
+---------+---------+
| |
+---------+-----+ +-------+-------+
| node1 | | node2 |
|192.168.56.101 | |192.168.56.102 |
+---------------+ +---------------+Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| Máquina Virtual (node1) | 1 vCPU, 1GB RAM, 1 interface de rede, Linux compatível (Debian 11+, Ubuntu 20.04+, CentOS 8+, Rocky 8+) |
| Máquina Virtual (node2) | 1 vCPU, 1GB RAM, 1 interface de rede, Linux compatível (mesmas versões acima) |
| Pacemaker | GPLv2 · a versão estável atual |
| Corosync | BSD · a versão estável atual |
| Apache HTTPD | Apache-2.0 · a versão estável atual |
| crmsh | GPLv2 · a versão estável atual |
Roteiro
- Preparar as máquinas virtuais
Garanta que ambas as VMs estão na mesma rede privada, com IPs fixos (node1: 192.168.56.101, node2: 192.168.56.102).
O que você deve ver: Ambas as VMs se pingam mutuamente.
- Configurar nomes e hosts
Edite /etc/hosts em ambos os nós para garantir resolução de nomes.
echo '192.168.56.101 node1' | sudo tee -a /etc/hosts echo '192.168.56.102 node2' | sudo tee -a /etc/hostsO que você deve ver: Ambos os nós resolvem node1 e node2 por nome.
- Instalar Pacemaker, Corosync e Apache
Instale os pacotes necessários em ambos os nós.
sudo apt update && sudo apt install pacemaker corosync crmsh apache2 -yO que você deve ver: Pacotes instalados sem erro.
- Habilitar e iniciar serviços
Garanta que Pacemaker e Corosync estão habilitados para iniciar automaticamente.
sudo systemctl enable corosync pacemaker sudo systemctl start corosync pacemakerO que você deve ver: Serviços ativos e em execução.
- Configurar Corosync
Edite /etc/corosync/corosync.conf em ambos os nós. Use o modo unicast para redes comuns.
Consulte a documentação oficial para gerar corosync.conf adequado ao seu ambiente.O que você deve ver: Arquivo corosync.conf idêntico nos dois nós.
- Sincronizar chave de autenticação do Corosync
Gere a chave com corosync-keygen em um nó e copie para o outro.
sudo corosync-keygen sudo scp /etc/corosync/authkey node2:/etc/corosync/O que você deve ver: Chave idêntica em ambos os nós.
- Reiniciar Corosync e Pacemaker
Reinicie os serviços para aplicar as configurações.
sudo systemctl restart corosync pacemakerO que você deve ver: Cluster inicializa sem erros.
- Verificar status do cluster
Use crm status para ver se ambos os nós aparecem online.
sudo crm statusO que você deve ver: Ambos os nós listados como online.
- Adicionar recurso IP flutuante
Crie o recurso de IP virtual que será migrado em caso de falha.
sudo crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 params ip=192.168.56.100 cidr_netmask=24 op monitor interval=30sO que você deve ver: Recurso ClusterIP criado e atribuído a um dos nós.
- Adicionar recurso Apache HTTPD
Crie o recurso para o serviço Apache.
sudo crm configure primitive WebServer ocf:heartbeat:apache params configfile=/etc/apache2/apache2.conf op monitor interval=30sO que você deve ver: Recurso WebServer criado e atribuído ao mesmo nó do IP virtual.
- Criar grupo de recursos
Agrupe IP e Apache para garantir que migrem juntos.
sudo crm configure group WebGroup ClusterIP WebServerO que você deve ver: Grupo WebGroup criado.
- Testar acesso ao serviço
Acesse http://192.168.56.100 de uma máquina cliente.
O que você deve ver: Página padrão do Apache exibida.
- Simular falha de nó
Desligue o nó ativo e observe a migração automática dos recursos.
sudo shutdown now (no nó ativo)O que você deve ver: Após alguns segundos, o serviço Apache responde pelo IP virtual no nó restante.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar status do cluster | sudo crm status | Ambos os nós online, recursos atribuídos corretamente. |
| Acessar serviço via IP virtual | curl http://192.168.56.100 | Receber resposta HTTP 200 e conteúdo da página padrão do Apache. |
| Simular falha e checar failover | sudo shutdown now (no nó ativo), depois crm status no nó restante | Recursos migrados para o nó sobrevivente, serviço disponível. |
| Verificar logs do Corosync e Pacemaker | sudo journalctl -u corosync -u pacemaker | Sem erros críticos, eventos de failover registrados. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Nó não aparece online no cluster | Configuração incorreta do corosync.conf ou chave de autenticação diferente | Revisar corosync.conf e garantir authkey idêntica nos dois nós |
| IP virtual não sobe em nenhum nó | Recurso mal configurado ou conflito de IP na rede | Verificar parâmetros do recurso ClusterIP e checar se o IP está livre |
| Apache não inicia via cluster | Caminho do configfile incorreto ou Apache não instalado | Corrigir parâmetro configfile e garantir Apache instalado |
| Recursos não migram após falha | Timeouts de monitoramento insuficientes ou problemas de fencing | Ajustar intervalos de monitoramento e revisar logs para mensagens de fencing |
Segurança e hardening
- Proteja o arquivo /etc/corosync/authkey (permissão 400, root)
- Use rede privada dedicada para comunicação do cluster
- Desabilite serviços desnecessários nos nós do cluster
- Aplique atualizações de segurança do sistema operacional
- Restrinja acesso SSH apenas a administradores
Checklist final
Referências
- Pacemaker Documentation · ClusterLabs (Pacemaker) (clusterlabs.org)
- Corosync Documentation · Corosync.github (corosync.github.io)
- LINBIT HA Cluster Guide · LINBIT (DRBD) (docs.linbit.com)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 3 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
