Hace unos días hablamos aquí de cómo poder montar una arquitectura master - slave en MySQL y los beneficios de la misma. Hoy vamos a ver cómo crear un sistema en MySQL master - master (o multimaster) y los beneficios del mismo.
En la gran mayoría de los casos, un sistema master - slave será lo ideal y ofrecerá una buena estabilidad entre rendimiento y fiabilidad. En este caso, lo que se favorece es un gran número de lecturas, frente a un número considerablemente bajo de escrituras. Por el contrario, la nueva acquitectura master - master, lo que favorecerá será a un gran número de escrituras, frente a un número normal o bajo de lecturas. Se escribe más de lo que se lee, de ahí que nos interese dividir los servidores de escritura.
Montar un sistema master - master realmente es configurar en ambos sentidos un sistema master - slave. El Master-1 será el slave del Master-2 y viceversa. Todo lo que se escriba en Master-2 será replicado automática a Master-1 y todo lo que se escriba en Master-1 será replicado automática a Master-2.
Los datos de los que partimos serán:- M1 -- 192.168.0.33 -- id: 1
- M2 -- 192.168.0.35 -- id: 2
En ambos nodos se cuenta con una versión 5.5.x de MySQL previamente instalada, por lo que únicamente explicaremos el proceso de replicación. Puesto que prácticamente lo que se haga en el primer nodo lo tendremos que ejecutar en el segundo, simplemente haremos un cambio del prompt de MySQL, para saber en qué equipo estamos en cada momento.
- Configuramos los servidoresAquí únicamente tendremos que configurar el fichero de configuración de MySQL (/etc/my.cfg) de ambos nodos. La configuración es similar a la de la arquitectura master-slave, pero como salvedad en este caso únicamente haremos réplica máster-máster de una base de datos.
log-bin = mysql-bin binlog-do-db = BD_master binlog-ignore-db = mysql binlog-ignore-db = test server-id = 1
Y aplicamos la misma configuración para M2, salvo por el server-id.log-bin = mysql-bin binlog-do-db = BD_master binlog-ignore-db = mysql binlog-ignore-db = test server-id = 2
- Reiniciamos el servicio MySQL
M1@shell> service mysqld restart
En ambos nodos...M2@shell> service mysqld restart
- Creamos un backup de los datosEl equipo M1 es el que contiene los datos de origen, así que serán los que empleemos para crear el clúster. Por lo tanto, haremos un backup de los mismos,
M1@shell> mysqldump -u root -p --master-data=2 > all.sql
- Posición del log para replicaciónY al igual que sucede al crear un slave, necesitamos saber en qué punto del binary log estamos situados, para indicar que será a partir de ese punto desde donde deba comenzar a replicar. Para eso, simplemente desde el servidor M1, ejecutamos:
mysql@M1> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 98 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
- Importamos los datos en M2Importamos los datos que sacamos del servidor M1 al servidor M2 para partir de los mismos datos de origen. Previamente a este importado, tendremos que pasar el fichero all.sql de M1 a M2.
mysql@M2> SOURCE /home/javier/all.sql
- Creamos el usuario de replicaciónPuesto que ambos nodos se replican el uno del otro, tendremos que crear un usuario en cada uno de los servidores.
mysql@M1> GRANT REPLICATION SLAVE, REPLICATION CLIENT -> ON *.* -> TO remote_user@'192.168.0.35' -> IDENTIFIED BY 'remote_user_passwd';
Lo mismo para el segundo master.mysql@M2> GRANT REPLICATION SLAVE, REPLICATION CLIENT -> ON *.* -> TO remote_user@'192.168.0.33' -> IDENTIFIED BY 'remote_user_passwd';
- Configuramos la replicación de datos
mysql@M1> CHANGE MASTER TO MASTER_HOST='192.168.0.35', -> MASTER_USER = 'remote_user', -> MASTER_PASSWORD = 'remote_user_passwd', -> MASTER_LOG_FILE = 'mysql-bin.000001 ', -> MASTER_LOG_POS = 98;
mysql@M2> CHANGE MASTER TO MASTER_HOST='192.168.0.33', -> MASTER_USER = 'remote_user', -> MASTER_PASSWORD = 'remote_user_passwd', -> MASTER_LOG_FILE = 'mysql-bin.000001 ', -> MASTER_LOG_POS = 98;
- Arrancamos los procesos slave's en ambos nodos
mysql@M1> START SLAVE;
mysql@M2> START SLAVE;
Y con esto ya tenemos un sistema de MySQL activo - activo, o lo que es lo mismo un slave de cada uno de los master's.
No hay comentarios :
Publicar un comentario