Esta é uma questão um pouco mais antiga, mas o problema apresentado aqui é baseado em um equívoco sobre como e quando o failover em clusters, especialmente em clusters de dois nós, funciona.
A essência é: Você não pode fazer o teste de failover desabilitando a comunicação entre os dois nós. Isso resultará exatamente no que você está vendo, um cenário de divisão de cérebro com STONITH adicional e mútuo. Se você quiser testar os recursos de proteção, um simples killall -9 corosync
no nó ativo será suficiente. Outras formas são crm node fence
ou stonith_admin -F
.
A partir da descrição não muito completa do cluster (onde está a saída de crm configure show
e cat /etc/corosync/corosync.conf
?), parece que você está usando os endereços 10.10.10.xx para mensagens, ou seja, a comunicação do Corosync / cluster. Os endereços 172.10.10.xx são seus endereços de rede regulares / de serviço e você acessaria um determinado nó, por exemplo, usando SSH, por seu endereço 172.10.10.xx. O DNS também parece resolver um nome de host do nó como node1
para 172.10.10.1.
Você configurou o STONITH para usar o SSH, o que não é uma boa ideia em si, mas provavelmente você está apenas testando. Eu mesmo não usei, mas presumo que o agente SSH STONITH efetue login no outro nó e emita um comando de desligamento, como ssh root@node2 "shutdown -h now"
ou algo equivalente.
Agora, o que acontece quando você corta a comunicação do cluster entre os nós? Os nós não veem mais cada nó como vivo e bem, porque não há mais comunicação entre eles. Assim, cada nó assume que é o único sobrevivente de algum evento infeliz e tenta se tornar (ou permanecer) o nó ativo ou primário. Este é o clássico e temido cenário de cérebro dividido .
Parte disso é certificar-se de que o outro nó, obviamente e presumivelmente falhado, esteja desativado para sempre, e é aí que entra o STONITH. Lembre-se de que ambos
Você provavelmente pode adivinhar o que acontece agora. node1
faz ssh root@node2 "shutdown -h now"
e node2
faz ssh root@node1 "shutdown -h now"
. Isso não usa a rede de comunicação do cluster 10.10.10.xx, mas a rede de serviço 172.10.10.xx. Como ambos os nós estão vivos e funcionando bem, eles não têm problema ao emitir comandos ou receber conexões SSH, portanto, os dois nós disparam um ao outro ao mesmo tempo. Isso mata os dois nós.
Se você não usa o STONITH, então um cérebro dividido pode ter consequências ainda piores, especialmente no caso do DRBD, onde você pode acabar com ambos os nós se tornando Primário. É provável que ocorra corrupção de dados e o cérebro dividido deve ser resolvido manualmente.
Eu recomendo a leitura do material no link que é escrito e mantido pelos caras que contribuíram (e ainda contribuem) um grande pedaço do que hoje chamamos de "pilha HA do Linux".
TL; DR : Se você está cortando a comunicação do cluster entre seus nós para testar sua configuração de proteção, você está fazendo errado . Use killall -9 corosync
, crm node fence
ou stonith_admin -F
. Cortar a comunicação do cluster só resultará em um cenário de cérebro dividido, o que pode e irá levar à corrupção de dados.