Un esclavo, múltiples amos MySql


9

¿Es posible configurar MySql Replication para que un esclavo escuche a dos maestros diferentes?

Respuestas:


3

Por diseño, un proceso mysqld no puede escuchar simultáneamente dos Maestros diferentes.

El comando CAMBIAR MAESTRO A solo le permite configurar un Maestro como fuente para leer.

Para emular esto, tendrías que alternar entre los dos Maestros mediante programación. Cómo haces eso ?

Describí en StackOverflow cómo conectar un esclavo manualmente a diferentes maestros donde cada maestro era una computadora portátil y el esclavo era una computadora central.

Aquí está la idea básica.

  • Master M1
  • Master M2
  • Esclavo s1

Configure la replicación de M1 a S1 y luego M2 a S1 de esta manera

  • 1) Haga que S1 ejecute CHANGE MASTER TO con M1 como fuente
  • 2) INICIAR ESCLAVO;
  • 3) Ejecute la replicación por un tiempo
  • 4) DETENER AL ESCLAVO;
  • 5) Haga que S1 ejecute CHANGE MASTER TO con M2 como fuente
  • 6) INICIAR ESCLAVO;
  • 7) Ejecute la replicación por un tiempo
  • 8) DETENER AL ESCLAVO;
  • 9) Regrese al paso 1

Cada vez que cambie de un maestro a otro, debe registrar dos valores de SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

Estos dos valores representan la última instrucción SQL que vino del maestro y fue la siguiente en ejecutarse en el esclavo.

Hay una precaución importante: mientras M1 y M2 estén actualizando bases de datos mutuamente excluyentes, este algoritmo debería estar bien.

Lo creas o no, abordé una pregunta como esta en ServerFault en mayo de 2011. De hecho, expliqué cómo emular un verdadero esclavo multimaestro / único usando el motor de almacenamiento BLACKHOLE basado en el libro "High Performance MySQL".


Aunque realmente no lo he necesitado todavía, he estado pensando en este tema antes. ¿No sería posible canalizar básicamente el binlog del segundo maestro en el esclavo mysql? Supongo que lo mejor sería tener una herramienta que también vigile los resultados de cada consulta y se detenga en un error al igual que lo hace el hilo de replicación esclavo normal. Pero, en esencia, una tubería simple también debería hacerlo. Por supuesto, ambos maestros que escriben en la misma base de datos / tabla se volverían difíciles rápidamente. ¿Algo para que los gurús reflexionen?
Jannes

1
Creo que vale la pena agregar a su respuesta que, aunque MySQL 5.6 no hace esto, 5.7 admitirá múltiples maestros.
Phil Sumner

4

La solución de Rolando tiene muchas advertencias. El primero es un flujo de réplica necesariamente no se replica mientras que el otro funciona. Esto le dará períodos de tiempo en los que su esclavo no está sincronizado. Ahora debe jugar un acto de equilibrio delicado para asegurarse de que cada uno tenga tiempo suficiente para ponerse al día cuando tenga su "turno".

Como se describió, también debe jugar al contador de posiciones de registro para volver a cambiar. Esto realmente parece defectuoso, abriendo la ventana para datos faltantes o inconsistentes o incluso rompiendo la replicación cuando sale mal (ya sea causado por incluso un error 'apagado por uno' en la posición de registro)

Recomendaría simplemente ejecutar múltiples instancias mysql. No hay nada que le impida ejecutar dos o más mysql en la misma máquina. Ambos no pueden operar en el mismo puerto, por supuesto. Sin embargo, realmente no veo esto como un problema, ya que cada cliente y biblioteca le permite especificar algo más que 3306.

Simplemente especifique port = 3307 (o lo que sea en uno de los archivos .cnf).

También tendrá que asegurarse de que los grupos de búferes configurados individualmente y otras configuraciones de memoria no estén en desacuerdo entre sí. Sin embargo, esto es realmente un beneficio, ya que puede ajustar con mayor precisión esa configuración a los requisitos específicos de las bases de datos individuales que se están replicando.

De esta manera, solo tiene dos secuencias de replicación ejecutándose en el mismo servidor; nunca detrás, no se requiere mantenimiento de libros, no se requiere script de "intercambio".


Me alegra que alguien entienda la locura de la contabilidad. Buena respuesta también. +1 !!!
RolandoMySQLDBA


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.