Eu sugeriria definir critérios do que significa "morto", então periodicamente pesquisar a condição de "morto" e realizar o balanço. Talvez "morto" seja definido como "não enviou nenhuma mensagem para nenhum dos nós em X segundos". Qualquer que seja a árvore de decisão que um ser humano siga atualmente para verificar se deve ou não virar o serviço. Pode ser 1 condição, 10 ou dezenas. Quão bem a lógica é definida irá controlar com que precisão detecta "morto" e falha.
Além disso, o processo de "swing over" deve incluir informar ao mestre "morto" que ele foi declarado como morto e não deve executar nenhum tipo de operação "mestre". Com uma exceção - você pode querer repetir todas as mensagens que foram passadas enquanto era master, mas não foram enviadas.
Ou, se o código do cliente estiver sob seu controle, faça com que os clientes gerenciem as mensagens que falharam na tentativa. Você precisa de algo para evitar que as mensagens caiam nas rachaduras.
Seria uma boa idéia ter também o mestre morto, se ele voltar online, para entrar online como um secundário ... e ter o detector de "deadness" agora pesquisando o novo mestre e pronto para falhar de volta o mestre original se esse mestre morrer e o mestre original estiver ativo.