Estou executando um cluster de 2 nós com DRBD (ativo/passivo) gerenciado pelo serviço drbd systemd e um pequeno script que monta volumes sempre que um recurso se torna primário.
Quero configurar o DRBD de forma que ele sempre resolva qualquer divisão cerebral e sempre tenha pelo menos um nó primário e capaz de servir em qualquer caso, desde que ambas as máquinas não estejam inoperantes.
Eu tentei a seguinte configuração (onde pri-lost-after-sb
está "reboot"
)
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
e on-suspended-primary-outdated force-secondary
e algumas outras combinações.
Mas sempre encontro um cenário em que o cluster entra em estado ruim e não se recupera de um cérebro dividido. Normalmente estou entrando StandAlone
nos nós e force-io-failures
no secundário (então depois de outra falha do primário, esse secundário não funcionará mesmo se estiver conectado).
Há mais alguma coisa que eu possa fazer para melhorar a robustez dessa configuração, considerando que priorizo fortemente o tempo de atividade do serviço e não a prevenção de perda de dados?
Responder1
Antigamente, tentei várias vezes configurar um cluster semelhante. Isso foi até que eu entendi que o DRBD foi quebrado por design e tem como segundo nome "cérebro dividido". No DRBD9 as coisas melhoraram um pouco (apenas em comparação com o 8.xx que foi um pesadelo), mas ainda não pode ser usado em produção. Vejo apenas uma solução: economize seu tempo e migre para algo mais confiável. Por exemplo, Ceph.