He implementado una solución HA para mysql basada en la replicación maestro-maestro. Hay un mecanismo en la parte frontal que garantiza que solo se leerá / escribirá un db en un momento dado (es decir, solo usamos replicación para HA).
He confirmado que la replicación funciona como se esperaba, pero me pregunto sobre el escenario de falla y la recuperación. En particular, me preocupa lo que sucede cuando un maestro falla en un estado irrecuperable y necesita ser recreado del otro maestro:
- Como el otro maestro está activo y es muy probable que lo use, no puedo bloquearlo y crear volcados
mysqldump
(nuestras bases de datos son moderadamente grandes ymysqldump
pueden tardar horas después de algunos meses de uso). - Incluso suponiendo que tengo un volcado, es crucial que la posición del binlog como se muestra en SHOW MASTER STATUS corresponda al volcado que se realiza después de que la base de datos ha sido bloqueada.
La solución simple al primer problema es usar una tercera base de datos que actúe como una copia de seguridad, desde la cual puedo hacer el mysqldump
. Pero entonces, ¿cómo me aseguro de que el maestro recreado pueda iniciar la replicación desde el maestro en ejecución de manera consistente?