Temos dois datacenters com uma cópia do nosso aplicativo web (plataforma de treinamento online) em cada um. O datacenter primário recebe todo o tráfego a qualquer momento e o segundo datacenter serve como failover (usando failover de DNS). Os bancos de dados são configurados em master-master com diferentes valores de auto-incremento-incremento. O servidor no datacenter 1 também possui seu próprio servidor escravo local no qual fazemos backups, dessa forma podemos pausar a replicação, fazer o backup com mysqldump e iniciar a replicação novamente.
SERVER 1 <=========> SERVER 2
|
Slave 1
Neste fim de semana, fizemos um failover no servidor 2 porque o datacenter 1 estava fazendo uma manutenção de rede planejada. Tudo correu bem e depois de algumas horas trouxemos tudo de volta para DC1. Ontem à noite, comecei a receber erros de replicação no escravo dizendo que falhou ao EXCLUIR uma entrada que não existia. Achei estranho que o Escravo 1 estivesse recebendo o erro enquanto o Servidor 2 não (já que ambos estão agindo como escravos do Servidor 1). Depois de cavar, descobri que ainda temos um usuário que está indo para o Servidor 2 .. por qualquer motivo, seu DNS não é atualizado há mais de 2 dias. Portanto, os novos dados que eles estão produzindo estão sendo replicados para o Servidor 1, mas o Escravo 1 não está recebendo essas atualizações porque não estão nos logs binários do Servidor 1.
Agora vejo que isso foi um mau planejamento da minha parte por não prever esse problema. Minha pergunta é, como posso fazer isso funcionar? Queremos manter o mestre-mestre e permitir que o Escravo 1 exista, não apenas para backups, mas para servidores adicionais de relatórios somente leitura e outros. Aqueles de vocês que dirigem o Master-Master, o que fizeram para remediar problemas semelhantes? Ou isso é apenas uma configuração ruim e eu sou SOL? O aplicativo não foi construído pensando na redundância, então tudo precisa ser feito no lado do sistema.