Alta Disponibilidade Linux: Cluster HA com DRBD e Pacemaker
Neste artigo
Para uma PME que depende de serviços críticos (base de dados, servidor de ficheiros, aplicação web), um downtime de horas pode custar mais do que a própria infra-estrutura. Um cluster de alta disponibilidade (HA) em Linux garante que, se um nó falhar, outro assume automaticamente o serviço em segundos — sem armazenamento partilhado caro (SAN).
Este guia mostra como implementar um cluster HA com DRBD (replicação de armazenamento block-level), Corosync (comunicação entre nós) e Pacemaker (orquestração de recursos) — a stack de código aberto de referência para HA em Linux, suportada pelo ClusterLabs.
1. Introdução ao HA em Linux
Alta disponibilidade não é cópia de segurança nem tolerância a falhas de hardware individual. É a capacidade de um serviço continuar disponível quando um componente falha. Em Linux, isto consegue-se com um cluster de pelo menos dois nós que partilham estado através de replicação e coordenam falhas via quorum.
A stack clássica tem três camadas: DRBD replica discos block-level pela rede (RAID-1 via Ethernet), Corosync mantém o heartbeat entre nós e gere o quorum, e Pacemaker decide qual nó corre cada recurso e executa o failover. Ao contrário de soluções com SAN partilhada, não há ponto único de falha no armazenamento.
ℹ O DRBD replica dados block-level em tempo real
Equivalente a RAID-1 pela rede, sem necessidade de armazenamento partilhado. Cada nó tem uma cópia completa dos dados, garantindo que o failover preserva o estado dos ficheiros.
Pré-requisitos: dois servidores Linux (Debian/Ubuntu ou RHEL/AlmaLinux) com rede dedicada para replicação (idealmente 1 Gbps ou superior), um disco livre em cada nó (ex: /dev/sdb1), e IPs estáticos. Para quorum num cluster de 2 nós, recomenda-se um terceiro nó witness ou dispositivo de quorum.
2. Instalar DRBD
O DRBD (Distributed Replicated Block Device) cria um dispositivo de bloco virtual (/dev/drbd0) que replica escritas para ambos os nós em tempo real. O DRBD é mantido pela LINBIT e disponível nos repositórios oficiais das principais distribuições.
Instalar o pacote em ambos os nós e configurar o recurso r0:
# Instalar DRBD em ambos os nos
sudo apt install drbd-utils
# Configurar recurso /etc/drbd.d/r0.res
resource r0 {
protocol C;
on node1 { device /dev/drbd0; disk /dev/sdb1; address 10.0.0.1:7789; meta internal; }
on node2 { device /dev/drbd0; disk /dev/sdb1; address 10.0.0.2:7789; meta internal; }
}
# Inicializar metadata em ambos os nos
sudo drbdadm create-md r0
# Activar o recurso em ambos os nos
sudo drbdadm up r0
# Marcar o node1 como primary (apenas no node1)
sudo drbdadm primary r0 --force
# Formatar e montar (no node1)
sudo mkfs.ext4 /dev/drbd0
sudo mount /dev/drbd0 /mnt/data
O protocol C garante replicação síncrona — a escrita só confirma após chegar ao disco remoto. É o protocolo mais seguro (zero perda de dados), mas tem mais latência. Para cargas onde alguma perda é tolerável, o protocolo A (assíncrono) oferece melhor desempenho.
Verificar o estado da replicação com cat /proc/drbd — deve mostrar Primary/Secondary e UpToDate/UpToDate após a sincronização inicial.
3. Configurar Corosync
O Corosync é o motor de comunicação do cluster — mantém o heartbeat entre nós, gere o quorum e entrega mensagens de membership. Sem Corosync, o Pacemaker não sabe quais nós estão vivos. Para clusters de 2 nós, é obrigatório configurar um dispositivo de quorum externo para evitar split-brain.
Em Debian/Ubuntu, o pcs automatiza a configuração do Corosync. Instalar Pacemaker, Corosync e pcs em ambos os nós:
# Instalar Pacemaker + Corosync + pcs em ambos os nos
sudo apt install pacemaker corosync pcs
# Activar e iniciar o servico pcsd
sudo systemctl enable --now pcsd
# Definir password do utilizador hacluster (igual em ambos os nos)
sudo passwd hacluster
# Autenticar os nos (a partir de um deles)
sudo pcs cluster auth node1 node2
# Criar e iniciar o cluster
sudo pcs cluster setup hacluster node1 node2
sudo pcs cluster start --all
sudo pcs cluster enable --all
# Verificar o estado
sudo pcs status corosync
sudo corosync-cmapctl | grep quorum
Para um cluster de 2 nós sem terceiro nó, desactivar a política de quorum estrito (não recomendado em produção crítica) ou configurar um dispositivo de quorum externo:
# Para cluster de 2 nos, permitir operacao sem quorum
# (apenas se nao houver witness node - usar com cautela)
sudo pcs property set no-quorum-policy=ignore
# Alternativa recomendada: configurar quorum device (QDevice)
sudo pcs qdevice add model net host=10.0.0.100 algorithm=ffsplit
sudo pcs qdevice start
4. Configurar Pacemaker
O Pacemaker é o gestor de recursos do cluster — decide onde cada serviço corre, monitoriza a sua saúde e executa o failover. Um recurso pode ser um IP virtual, um filesystem, um serviço systemd ou um script OCF (Open Cluster Framework).
Começar por criar o IP virtual — o endereço que os clientes usam para aceder ao serviço, que flutua entre nós conforme o failover:
# Criar recurso IP virtual
sudo pcs resource create VIP ocf:heartbeat:IPaddr2 \
ip=10.0.0.100 cidr_netmask=24 \
op monitor interval=30s
# Criar recurso DRBD (filesystem replicado)
sudo pcs resource create DRBD ocf:linbit:drbd \
drbd_resource=r0 \
op monitor interval=15s
# Promover DRBD a master/slave (Primary/Secondary)
sudo pcs resource master DRBDClone DRBD \
master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
# Criar filesystem que monta o DRBD
sudo pcs resource create FS ocf:heartbeat:Filesystem \
device=/dev/drbd0 directory=/mnt/data fstype=ext4
# Ordenar: DRBD -> FS -> VIP
sudo pcs constraint order DRBDClone then FS
sudo pcs constraint order FS then VIP
# Colocar tudo no mesmo no
sudo pcs constraint colocation add FS DRBDClone INFINITY with-rsc-role=Master
sudo pcs constraint colocation add VIP FS INFINITY
As restrições de ordem garantem que o DRBD é promovido a Primary antes de montar o filesystem, e este antes de activar o IP. As restrições de colocação garantem que tudo corre no mesmo nó.
5. Recursos e Fencing
Fencing (STONITH — Shoot The Other Node In The Head) é o mecanismo que desliga fisicamente ou isolamenta um nó que deixou de responder. Sem fencing, se o heartbeat falhar mas o nó continuar a escrever no disco, ambos os nós podem tentar ser Primary simultaneamente — split-brain, que corrompe dados.
⚠ Configurar fencing (STONITH) obrigatoriamente
Sem fencing, split-brain pode corromper dados. O STONITH garante que um nó em falha é desligado antes do outro assumir, impedindo escritas simultâneas no mesmo dispositivo DRBD.
Tipos de fencing comuns em PME: IPMI/BMC (desliga o servidor via interface de gestão), iLO/iDRAC (vendor-specific), libvirt (em ambientes virtualizados), APC/Schneider PDU (corta energia pela tomada de rede).
# Exemplo: fencing via IPMI
sudo pcs stonith create stonith-ipmi-node1 fence_ipmilan \
pcmk_host_list=node1 ipaddr=10.0.0.11 login=admin passwd=SEGREDO \
lanplus=1 cipher=3 op monitor interval=60s
sudo pcs stonith create stonith-ipmi-node2 fence_ipmilan \
pcmk_host_list=node2 ipaddr=10.0.0.12 login=admin passwd=SEGREDO \
lanplus=1 cipher=3 op monitor interval=60s
# Verificar configuracao de fencing
sudo pcs stonith show
sudo pcs stonith fence --confirm node1 # teste manual
Para PME sem IPMI, uma alternativa é o fence_scsi (fencing via SCSI persistent reservations) ou fence_vmware_soap em ambientes virtualizados no VMware.
6. Testar Failover
Após configurar o cluster, é obrigatório testar o failover em todos os cenários antes de entrar em produção. Um cluster não testado é uma falsa sensação de segurança.
# Cenario 1: Failover manual
sudo pcs node standby node1
# Verificar que os recursos migraram para node2
sudo pcs status
# Reativar node1 (os recursos nao voltam automaticamente)
sudo pcs node unstandby node1
# Cenario 2: Simular falha de servico
sudo pcs resource fail-stop FS
sudo pcs status # verificar se Pacemaker reiniciou o recurso
# Cenario 3: Mover recurso explicitamente
sudo pcs resource move VIP node2
sudo pcs resource clear VIP # limpar restricao temporaria
# Cenario 4: Matar processo do DRBD
sudo killall drbdworker
sudo pcs status # verificar recuperacao automatica
| Cenário | Tempo esperado | Resultado |
|---|---|---|
| Failover manual (standby) | 3–10 s | VIP e FS mudam para nó secundário |
| Falha de processo (kill) | 5–15 s | Pacemaker reinicia ou migra recurso |
| Falha total do nó (power off) | 10–30 s | STONITH executa, failover automático |
| Falha de rede (heartbeat) | 15–60 s | Fencing + failover (se quorum mantido) |
Os tempos dependem do timeout configurado em cada recurso (op monitor interval, timeout, e do tempo de promovção do DRBD). Ajustar conforme os requisitos de RTO (Recovery Time Objective).
7. Erros Comuns e Lista de Verificação
A maioria dos problemas em clusters HA não vem de bugs, mas de configuração incorrecta ou pressupostos inválidos. Estes são os erros mais frequentes e como os evitar:
| Causa | Sintoma | Solução |
|---|---|---|
| STONITH não configurado | Pacemaker recusa iniciar recursos | Configurar fence device ou stonith-enabled=false (só laboratório) |
| Split-brain (sem fencing) | Ambos os nós Primary, dados divergentes | Configurar STONITH + quorum device; escolher nó vencedor e resync |
| DRBD em StandAlone | Replicação parada, estado WFConnection | drbdadm connect r0 após resolver causa |
| Disco cheio no DRBD | Escritas bloqueiam, serviço para | Monitorizar ocupação; usar LVM thin provisioning se necessário |
| Firewall bloqueia portas 7789/5404 | Heartbeat falha, nós invisíveis | Abrir portas DRBD (7789) e Corosync (5404/5405 UDP) |
| Hostname não resolve | pcs cluster setup falha |
Configurar /etc/hosts ou DNS em ambos os nós |
Lista de Verificação pré-produção
Antes de considerar o cluster pronto para produção, confirmar cada ponto:
- STONITH configurado e testado — executar
pcs stonith fence --confirm nodeXe confirmar que o nó desliga. - Quorum garantido — cluster de 2 nós tem QDevice ou
no-quorum-policy=stop(não ignore). - DRBD sincronizado —
cat /proc/drbdmostra UpToDate/UpToDate. - Restrições de ordem e colocação —
pcs constraint showsem conflitos. - Firewall configurado — portas 7789 (DRBD), 5404/5405 UDP (Corosync), 2224 TCP (pcsd) abertas.
- Rede dedicada de replicação — interface separada para DRBD, idealmente cross-link directo.
- Failover testado em todos os cenários — standby, kill de processo, power off, falha de rede.
- Monitorização activa — alertas para estado do cluster, DRBD, quorum e STONITH.
- Backups independente do DRBD — DRBD não substitui backups; se ambos os nós corrompem, perde-se tudo.
Um cluster HA bem configurado proporciona RTO de segundos e RPO zero (com protocol C). Para PME, é a forma mais custo-eficiente de alcançar disponibilidade elevada sem investir em SAN ou soluções proprietárias. A chave está no testing rigoroso e no fencing correctamente configurado.