MySQL de alta disponibilidad, failover y replicación con Latencia

8

Estamos en el proceso de implementar un nuevo CMS (Drupal 6.x) que se ejecuta en MySQL. Tenemos dos centros de datos, primario y secundario, con latencia conocida entre ellos. No estamos seguros de qué versión de MySQL ejecutaremos ... ya sea Community o Enterprise, pero eso es un TBD. Parece que ejecutaremos el motor InnoDB, el sistema operativo será RedHat EL 5.5 Los servidores primarios estarán activos, mientras que el secundario será pasivo o en espera.

Me gustaría implementar replicación, alta disponibilidad y conmutación por error automatizada en MySQL en los dos centros de datos.

Después de una conmutación por error a los servidores secundarios, cuando regresamos a los servidores primarios, nos gustaría sincronizar los datos de la base de datos secundaria a la base de datos primaria rápida y completamente para que podamos continuar sirviendo contenido desde los servidores primarios.

Estoy interesado en saber qué tecnologías / herramientas / mejores prácticas se pueden utilizar para resolver / abordar estos problemas. Además, cualquier gotchas o momentos ah-ha también serían muy apreciados. He leído sobre replicación MySQL, clustering y algunas herramientas de terceros como Tungsten y Dolphinics, pero no estoy seguro de cuál es el mejor curso de acción.

¡Gracias por tu tiempo!

KM

KM.
fuente

Respuestas:

3

En aras de la simplicidad, solo recomiendo MySQL Circular Replication. Aquí es por qué:

Existen muchas tecnologías y topologías que son muy superiores a la replicación circular de MySQL. Mi favorito, sin lugar a dudas , es DRBD (Distributed Replicated Block Device) . Sin embargo, DRBD funciona muy bien cuando el par de servidores está en el mismo edificio, centro de datos y bastidor. Es aún mejor cuando se utiliza un cable cruzado en la subred 192.168.xx entre DRBD Primary y DRBD Secondary. Desafortunadamente , DRBD tiene un rendimiento horrible en una distancia entre dos ubicaciones, aunque DRBD aún puede funcionar. No existen topologías de red para brindarle el rendimiento DRBD satisfactorio que se necesita entre dos centros de datos.

Una vez que configura la replicación circular MySQL entre los dos servidores de base de datos en dos centros de datos diferentes, el único ajuste necesario es para la red. En esencia, el rendimiento de la replicación es una función de la configuración de la red (velocidad / latencia de la transmisión de registros binarios en la configuración de replicación MySQL) y la E / S de disco (DRBD).

Una alternativa que puede desear para una mejor redundancia es la siguiente, por ejemplo:

Configure un par DRBD en ambos lugares
Par DRBD en el sitio n. ° 1 con VIP 111.111.111.111
Par DRBD en el sitio n. ° 2 con VIP 222.222.222.222

Configure la replicación circular MySQL entre los servidores primarios DRBD en estas condiciones:
Para el sitio # 1, use 222.222.222.222 como Master_Host en MySQL
Para el sitio # 2, use 111.111.111.111 como Master_Host en MySQL

Aunque presenta un nivel de complejidad, ahora tiene dos niveles de redundancia: DRBD dentro de cada sitio y MySQL Circular Replication entre sitios. Tiene los beneficios adicionales de ejecutar copias de seguridad a través de mysqldump en el DRBD primario del servidor en espera activo.

En cuanto a la conmutación por error, DRBD proporciona conmutación por error automática en cualquier sitio.

Solo en el caso de que un centro de datos no esté totalmente disponible, usaría el DB VIP en el sitio de espera activa.

ACTUALIZAR

Acabo de hacer una doble toma y noté que estás usando Drupal6. Me alegra que convierta todas las tablas de drupal a InnoDB. Esto eliminará cualquier posibilidad de que las actualizaciones de la tabla MyISAM provoquen que los bloqueos de la tabla congelen las conexiones DB que simplemente están leyendo las tablas MyISAM. ¡Cualquier actualización DML (INSERTOS, ACTUALIZACIONES, DELETES) contra una tabla MyISAM SIEMPRE HARÁ UN BLOQUEO DE TABLA COMPLETA! El uso de InnoDB introducirá el bloqueo a nivel de fila, lo que elimina los bloqueos completos de la tabla.

Además, DRBD se convierte en tu amigo cuando todo es InnoDB porque la recuperación de fallos será coherente entre el par DRBD. Por el contrario, DRBD con MyISAM no le compra nada porque una tabla MyISAM bloqueada en la Primaria DRBD simplemente está duplicada en la Secundaria DRBD como, lo adivinó , una tabla MyISAM bloqueada.

ACTUALIZACIÓN # 2

Debes usar dos niveles de redundancia

Nivel 1: en cada centro de base de datos, use DRBD.
http://dev.mysql.com/doc/refman/5.1/en/ha-drbd.html

Configurar un par de servidores DB
Startup DRBD
Startup MySQL en el DRBD Primary

Esto crea datos redundantes a nivel de disco.

Nivel 2: debe configurar la replicación circular de MySQL entre
DRBD Primary of DataCenter # 1 y DRBD Primary of DataCenter # 2

Cada DRBD primario ejecutará MySQL y actuará
como maestro y esclavo entre sí

Tengo una configuración para topologías de clientes como esta y la considero bastante estable.

RolandoMySQLDBA
fuente
Gracias @RolandoMySQLDBA. Su punto sobre el uso de un VIP de carga equilibrada para interrupciones del centro de datos tiene sentido. Entonces tendríamos un maestro-esclavo en cada centro de datos, ¿verdad? En caso de recuperación, ¿cuál cree que es la mejor manera de garantizar que las bases de datos primarias estén actualizadas? Además, he estado mirando la replicación circular, ¿y parece que se basa en la agrupación de MySQL? con NDB? No creo que Drupal 6 funcione bien con NDB ( drupal.org/node/391130 ). ¡Gracias de nuevo por tu tiempo!
KM.
¡He actualizado mi respuesta! Por cierto, nunca mencioné NDB. MySQL Circular Replication es solo Master-Slave implementado bidireccionalmente.
RolandoMySQLDBA
Gracias por la aclaración. Algunas de las referencias de replicación circular de MySQL mencionaron NDB, así que quería verificar dos veces (-: BTW, ¿Qué tan automatizado puede obtener con la conmutación por error usando estas topologías?
KM.
DRBD está diseñado para facilitar la conmutación por error automática utilizando Linux HeartBeat o ucarp ( ucarp.org/project/ucarp ). Mi empresa, LogicWorks, es una tienda de ucarp. ucarp permite que dos máquinas compartan una dirección IP virtual (VIP). DRBD Master tendría el VIP con MySQL ejecutándose en él. DRBD Secondary tendría ucarp ejecutándose y esperaría una relación de tiempo muerta para activar la conmutación por error automática. Los scripts ascendentes y descendentes para que ucarp asuma el VIP VIP deben incluir el montaje del disco DRBD, hacerlo primario e iniciar MySQL. El script Down detendría el desmontaje del DRBD de MySQL, pasaría a Secundario y mataría al VIP.
RolandoMySQLDBA