Eu implementei uma solução HA para mysql com base na replicação master-master. Existe um mecanismo na parte frontal que garante que apenas um banco de dados seja lido / gravado em um determinado momento (ou seja, usamos apenas replicação para HA).
Confirmei que a replicação funciona conforme o esperado, mas estou me perguntando sobre o cenário de falha e a recuperação. Em particular, me preocupo com o que acontece quando um mestre falha em um estado irrecuperável e precisa ser recriado do outro mestre:
- Como o outro mestre está ativo e provavelmente usado, não posso bloqueá-lo e criar despejos
mysqldump
(nossos bancos de dados são moderadamente grandes emysqldump
podem levar horas após alguns meses de uso). - Mesmo assumindo que eu tenho um despejo, é crucial que a posição do binlog, conforme mostrado por SHOW MASTER STATUS, corresponda ao despejo que está sendo feito após o bloqueio do banco de dados.
A solução simples para o primeiro problema é usar um terceiro banco de dados que funcione como um backup, do qual eu posso fazer o mysqldump
. Mas como garantir que o mestre recriado possa iniciar a replicação do mestre em execução de maneira consistente?