Heartbeat en la replicación de MySQL 5.5

La nueva versión MySQL 5.5 incluye mejoras en la replicación que hace casi obligatorio la actualización a esta nueva versión mayor. Una de ellas ya se comentó en este blog, la replicación semi-síncrona. Ahora vamos a hablar de otra mejora, la inclusión de un heartbeat para la replicación.

Heartbeat es un término (traducido como latidos) usado por muchas aplicaciones de alta disponibilidad. El funcionamiento es sencillo, un sistema envía latidos (que no son más que unos pequeños paquetes de datos) y en el momento que el receptor no los reciba sabrá que el primer equipo se habrá caído.

Esto nos permite saber de una forma casi instantánea cuando una replicación se ha parado. En MySQL 5.5 es el maestro quien envía los latidos al esclavo y si este deja de recibirlos dará por supuesto que la comunicación se ha caído. La configuración es muy sencilla:

STOP SLAVE;
CHANGE MASTER TO master_heartbeat_period=segundos;
START SLAVE;

El valor en segundos puede ir desde 0.001 a 4294967. Si no se indica nada, por defecto el valor será el resultado de slave_net_timeout/2. Así el slave indica al master cada cuanto tiempo debe enviar el latido.

Y podemos comprobar el estado con este comando:

node2 [localhost] {msandbox} ((none)) > show status like '%heartbeat%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| Slave_heartbeat_period    | 1.000 |
| Slave_received_heartbeats | 1670  |
+---------------------------+-------+
2 rows in set (0.00 sec)


Comments

  1. Algo nuevo que acabo de aprender. Acabo de probar en mi sistema y el esclavo tenía los heartbeats recibidos a 0. Me estrañó el tema y fui a mirarlo en la documentación de mysql. Resulta que el Slave_heartbeat_period son segundos, y cada vez que se se le pasa un valor del binlog al esclavo el valor se resetea (lógico), por lo que en una base de datos que se actualice continuamente como la mía que soporta de icinga, es normal. Muchas gracias por compartir la información! :-)

    Brigo on