Replicación en MySql Maestro – Esclavo

El presente artículo busca ser una guía para todos los desarrolladores o administradoresque necesitan configurar MySql en una arquitectura Maestros – Esclavo. En este articulo se asumirá que el usuario ya tiene instalado MySql en las dos o más maquinas en las cuales correrá la arquitectura.

Antes de comentar el proceso de configuración mencionaré algunos puntos que deben ser tenidos en cuenta para la implementación la replicación en MySql.

  • Para poder montar una arquitectura de replicación es necesario tener instalada una versión de MySql superior a 5.0.10.
  • La arquitectura de Maestro – Esclavo de MySql soporta una replicación asíncrona unidimensional, es decir, un servidor actúa como Maestro y otro servidor o varios servidores como esclavos. Esta replicación es contraria a la que realiza MySqlCLuster.
  • El servidor maestro escribe actualizaciones en el fichero de log binario, y mantiene un índice de los ficheros para rastrear los cambios de logs.
  • Estos logs son leídos por los esclavos para realizar las actualizaciones.
  • Un servidor esclavo puede servir como maestro si se requiere una cadena de replicaciones.
  • Es importante mencionar que si se realizará algún cambio en la base de datos debe hacerse sobre el esquema del maestro, nunca sobre algún esclavo pues esto puede generar problemas al momento de realizar actualizaciones.
  • Debido a la distribución de esta arquitectura es muy fácil ganar en robustez y poner como maestro a algún esclavo si el maestro falla. Esto implicará que luego el maestro debe ser actualizado antes de retomar como maestro.
  • Los tiempos de respuesta pueden mejorarse considerablemente su la carga de las consultas se distribuyen entre los esclavos, y las actualizaciones se realizan sobre el maestro, es decir, enviar todos los SELECTS a los esclavos y los INSERTS, UPDATES y DELETES al maestro.

En resumen lo que se debe hacer cuando se pretende montar una arquitectura Maestro – esclavo es crear una conexión abierta en el maestro para el esclavo o cada uno de los esclavos. Por medio de esa conexión abierta los esclavos leen los cambios realizados en el maestro y actualizan sus datos. Por medio del archivo (log-binario) que escribe el maestro y leen los esclavos, estos se actualizan ejecutan dichos cambios en sus tablas. Por medio de este log binario los esclavos siempre saben en qué punto de actualización se encuentran.

Como ya hemos mencionado, para poder montar una arquitectura Maestro – Esclavo den MySql se deben tener por lo menos dos instancias de MySql, una será maestro y la otra actuará como esclavo, la instancia del esclavo será la réplica del maestro.

Una vez mencionados estos puntos ahora si manos a la obra.

Paso 1.

El primer que debemos seguir es configurar los archivos de configuración de MySQL tanto en el maestro como en el esclavo

En el maestro: 192.168.2.100 (la ip del master que usaremos para este ejemplo)

#vi /etc/mysql/my.cnf

Y en el archivo my.cnf del maestro debemos tener algo asi

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-ignore-db=mysql
binlog-ignore-db=test

En el esclavo: 192.168.2.101 (la ip del sclavo usada para este ejemplo)

[mysqld]
server-id=2

Paso 2.

Con estos cambios realizados el siguiente paso es arrancar cada uno de los servidores

# vi /etc/inid.d/myqld start

Paso 3.

Una vez esté el servicios de MySql arriba, en el Maestro debemos crear la base de datos que vamos a replicar en el esclavo, después de crear la base de datos debemos crear las tablas de la base de datos y cargarlas con los datos iníciales para el correcto funcionamiento. Es probable q la base de datos no requiera datos iníciales, pero generalmente eso no es así. Una vez hemos creado las tablas y cargado los registros requeridos debemos bloquear las tablas para hacer el dump de la base de datos que cargaremos en el esclavo, esto lo hacemos de la siguiente manera en el Maestro

mysql> LOCK ALL TABLES READ ONLY;
mysql> exit

Con esto debemos crear el dump de la base de datos en el maestro y cargarla luego a nuestro esclavo

  • En el maestro

# mysqldump -u user -p DDBB > dump_para_esclavo.sql

  • En el esclavo

# mysql –u user –p DDBB < dump_para_esclavo.sql

Paso 4.

El paso siguiente es crear la replicación en el maestro, es decir, indicarle al maestro en donde residirá la replicación, para esto debemos indicar el usuario, el host desde donde se conectará e indicar a que base de datos se le hará la réplica en el esclavo indicado.

mysql> GRANT REPLICATION esclavo ON ddbb.* TO ‘usuario_replica’@’192.168.2.101’ IDENTIFIED BY ‘clave-segura’;

Una vez hemos creado la replicación el paso siguiente es conocer la situación del maestro, es decir el archivo del binario actual y la posición actual del binario. Esta situación es la que le debemos dar al esclavo para que reconozca el punto de partida de la replicación.

mysql> SHOW MASTER STATUS;

+——————+———-+————–+————————-+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+————————-+
| mysql-bin.000013 | 113 | | mysql,test |
+——————+———-+————–+————————-+
1 row in set (0.01 sec)

Los datos que debemos recordar y que utilizaremos al momento de arrancar el esclavo son File “mysql-bin.00005” y Position “57”.

Una vez obtenida esta información podemos desbloquear las tablas de la base de datos en el maestro.

mysql> UNLOCK ALL TABLES;

Paso 5.

Después de tener las bases de datos creadas y cargadas de igual manera tanto en el maestro como en el esclavo (Paso 3) y de tener la información correspondiente al estado del maestro el paso siguiente es configurar el esclavo para que empiece a hacer la réplica del maestro. Para esto se deben seguir los siguientes pasos:

mysql> CHANGE MASTER TO MASTER_HOST=192.168.0.1;
mysql> CHANGE MASTER TO MASTER_USER=’usuario_replica’;
mysql> CHANGE MASTER TO MASTER_PASSWORD=’clave-segura’;
mysql> CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000013’;
mysql> CHANGE MASTER TO MASTER_LOG_POS=113;
mysql> START SLAVE;

Una vez lanzada la última sentencia “START SLAVE” empieza la replicación del maestro al esclavo. Para verificar que la replicación se está ejecutando adecuadamente debemos correr el siguiente comando:

mysql> show slave status \G

Lo cual nos debe mostrar algo parecido a esto:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.1
Master_User: usuario_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 113
Relay_Log_File: localhost-relay-bin.000001
Relay_Log_Pos: 113
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 113
Relay_Log_Space: 113
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)

ERROR:
No query specified

Lo importante de este reporte es que no nos reporte error alguno y sobretodo mirar el apartado Seconds_Behind_Master el cual nos indica el retraso de este esclavo con respecto al maestro.

Con esto podemos empezar a hacer cambios y generar registros en la base de datos del maestro y verificar si los mismos se están reportando en el esclavo.

Related Posts Plugin for WordPress, Blogger...

publicidad

Deja una respuesta

Tu dirección de correo electrónico no será publicada.