LINUX

Configurar la replicación maestra de MySQL Master en Ubuntu (5 pasos)

La replicación maestro-esclavo en bases de datos MySQL proporciona equilibrio de carga para las bases de datos. Pero no proporciona ningún escenario de conmutación por error. Si el servidor maestro se rompe, no podemos ejecutar consultas directamente en el servidor esclavo. Además del equilibrio de carga, si necesitamos conmutación por error en nuestro escenario, podemos configurar 2 instancias de MySQL en la replicación maestro-maestro.

Este artículo muestra cómo configurar la replicación maestro-maestro de MySQL en el servidor Ubuntu 16.04.

En la replicación de maestro maestro, ambos servidores desempeñan el papel de maestro y esclavo entre sí, como en el siguiente diagrama:

Configuración de MySQL Master-Master

Cada servidor sirve como maestro para el otro esclavo al mismo tiempo. Entonces, si está familiarizado con la replicación maestro-esclavo en MySQL, esto debe ser pan comido para usted.

Prerrequisitos

Este artículo asume que está ejecutando un sistema operativo basado en Linux. También se requiere un servidor MySQL. Para esta demostración se utilizan los siguientes sistemas operativos / paquetes:

  1. Ubuntu 16.04 LTS (Xenial Xerus)
  2. mysqld Ver 5.7.12-0ubuntu1.1

También estamos usando 2 servidores que estarán en configuración Master-Master. Estos servidores se denominan:

  1. LinoxideMasterLeft (IP – 192.168.1.101)
  2. LinoxideMasterRight (IP – 192.168.1.102)

Esta configuración también funcionará en otros sistemas operativos basados ​​en Linux, pero algunas rutas de archivo de configuración pueden cambiar.

Ahora comencemos con los pasos utilizados para la replicación de MySQL:

Paso 1: Instale el servidor MySQL

El servidor MySQL debe instalarse en ambos servidores. Este paso es el mismo para ambos servidores:

raghu@LinoxideMasterLeft:~$ sudo apt-get update && sudo apt-get install mysql-client mysql-server

root@LinoxideMasterRight:~# sudo apt-get update && sudo apt-get install mysql-client mysql-server

Esta instalación le pedirá que elija una contraseña de root de MySQL. Elija una contraseña segura y manténgala a salvo con usted.

Ahora, dependiendo de su caso de uso, es posible que desee replicar una o varias bases de datos.

Caso de uso 1: Necesita replicar solo el número seleccionado de bases de datos. Los nombres de la base de datos para la replicación se especifican con la opción “binlog_do_db” en el archivo de configuración de MySQL.

Caso de uso 2: Necesita todas sus bases de datos para replicar excepto algunas. Es posible que desee crear nuevas bases de datos en el futuro y agregarlas a la lista manualmente podría ser un problema. Entonces, en este caso, no use la opción “binlog_do_db”. MySQL replicará todas sus bases de datos de forma predeterminada si no coloca esta opción en la configuración. Simplemente colocamos las bases de datos que no necesitan ser replicadas (como “information_schema” y “mysql”) con la opción “binlog_ignore_db”.

También puede usar ambas opciones simultáneamente si eso es lo que desea. Para el propósito de esta demostración, replicaremos solo 1 base de datos (como en el caso 1).

Las instancias de MySQL que participan en la replicación forman parte de un grupo (de replicación). Todos los servidores de este grupo tienen una identificación única. Al configurar nuestros servidores para la replicación, debemos asegurarnos de que este ID no esté duplicado. Veremos esto en un rato.

Paso 2: configurar MySQL para escuchar en una dirección IP privada

En nuestra configuración, la configuración de MySQL se incluye desde archivos en otro directorio. Abra el archivo de configuración de MySQL /etc/mysql/my.cnf para confirmar que la línea con «/Etc/mysql/mysql.conf.d/» está presente. (Este archivo no hace más que incluir los archivos de otros directorios).

Asegúrese de que la siguiente línea esté presente en este archivo:

!includedir /etc/mysql/mysql.conf.d/

Ahora editaremos el archivo «/Etc/mysql/mysql.conf.d/mysqld.cnf».

Lo primero que queremos hacer es habilitar el demonio MySQL para escuchar en la dirección IP privada. De forma predeterminada, el demonio se vincula a sí mismo con la dirección IP de bucle invertido. (También puede hacer que escuche en la dirección IP pública, pero generalmente no es necesario acceder a los servidores de base de datos directamente desde Internet). Entonces cambiamos la línea:

bind-address = 127.0.0.1

Para lucir como:

bind-address = 192.168.1.101

Asegúrese de cambiar esta dirección IP a la dirección IP de su servidor.

Realizamos los mismos cambios en el otro servidor MySQL.

Controlar /etc/mysql/my.cnf:

!includedir /etc/mysql/mysql.conf.d/

Y realice cambios en /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address = 192.168.1.102

Paso 3: configuración de la replicación

Ahora que nuestros servidores MySQL están configurados para escuchar las direcciones IP privadas, es hora de habilitar la replicación en la configuración de MySQL. Empecemos con LinóxidoMaestroIzquierda servidor.

En el mismo archivo de configuración, busque las siguientes líneas:

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name

Necesitamos descomentar estas líneas y mencionar la base de datos que vamos a replicar. Después de los cambios, se verá así:

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = linoxidedb
#binlog_ignore_db = include_database_name

Como estamos replicando solo una base de datos, no necesitamos descomentar la línea con «#Binlog_ignore_db».

Realice los cambios correspondientes en el otro servidor LinóxidoMaestroDerecho también:

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = linoxidedb
#binlog_ignore_db = include_database_name

Ahora que los archivos de configuración se cambiaron en ambos servidores, reiniciaremos el servicio MySQL:

root@LinoxideMasterLeft:~# service mysql restart

Y en el otro servidor también:

root@LinoxideMasterRight:~# service mysql restart

Podemos verificar que nuestros cambios de configuración estén cargados y que el servidor esté escuchando en la dirección IP correcta:

root@LinoxideMasterLeft:~# netstat -ntpl | grep mysql
tcp 0 0 192.168.1.101:3306 0.0.0.0:* LISTEN 1924/mysqld

Y

root@LinoxideMasterRight:~# netstat -ntpl | grep mysql
tcp 0 0 192.168.1.102:3306 0.0.0.0:* LISTEN 1422/mysqld

Paso 4: crear un usuario de replicación

Para la replicación de MySQL, necesitamos crear un nuevo usuario para la replicación que tendrá permiso de replicación en todas las bases de datos. Creemos este usuario con las siguientes consultas de MySQL:

Abra el indicador de MySQL en LinóxidoMaestroIzquierda servidor con el siguiente comando:

root@LinoxideMasterLeft:~# mysql -u root -p
Enter password:

Proporcione la contraseña que eligió durante la instalación del servidor MySQL. Lo dejará en el indicador de MySQL. Ingrese los siguientes comandos en este indicador:

mysql> CREATE USER 'linoxideleftuser'@'%' identified by 'replicatepass';
Query OK, 0 rows affected (0.09 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'linoxideleftuser'@'%';
Query OK, 0 rows affected (0.00 sec)

Ahora creamos el usuario similar en el otro servidor. LinóxidoMaestroDerecho:

mysql> CREATE USER 'linoxiderightuser'@'%' identified by 'replicatepass';
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'linoxiderightuser'@'%';
Query OK, 0 rows affected (0.00 sec)

Paso 5: configurar MySQL Master en ambos servidores

Ahora, en este último paso, le decimos a cada servidor que el otro servidor es el servidor maestro desde el que se está sincronizando.

Paso 5.1: Dígale LinóxidoMaestroDerecho sobre su amo:

En primer lugar, comprobaremos el estado de Master de LinóxidoMaestroIzquierda servidor. Ejecute el siguiente comando en el indicador de MySQL para verificar el estado del maestro:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1447 | linoxidedb | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Aquí, necesitamos 2 piezas de información: el Archivo (mysql-bin.000001) y la Posición (1447) para configurar este servidor como maestro de LinóxidoMaestroDerecho (junto con el nombre de usuario y la contraseña que establecimos en el último paso).

Ejecute el siguiente comando en LinóxidoMaestroDerecho para decirle que LinóxidoMaestroIzquierda es su amo:

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = 'LinoxideMasterLeft', MASTER_USER = 'linoxideleftuser', MASTER_PASSWORD = 'replicatepass', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 1447;
Query OK, 0 rows affected, 2 warnings (0.07 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

Repita los mismos pasos para el otro servidor.

Paso 5.2: Dígale LinóxidoMaestroIzquierda sobre su amo

Ejecute el siguiente comando en LinóxidoMaestroDerecho para comprobar su estado maestro:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 621 | linoxidedb | | |
+------------------+----------+--------------+------------------+-------------------+

Configurar el LinóxidoMaestroIzquierda y cuéntele sobre su maestro ejecutando el siguiente comando:

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = 'LinoxideMasterRight', MASTER_USER = 'linoxiderightuser', MASTER_PASSWORD = 'replicatepass', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 621;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

Eso es. Uf … Fueron muchas configuraciones. Ahora que hemos trabajado tanto, verifiquemos que nuestra configuración esté funcionando. Tenga en cuenta que el el siguiente paso es opcional y no forma parte de la configuración de replicación de MySQL Master-Master.

Paso 6: probar la replicación de Mysql

Creemos la base de datos en LinóxidoMaestroIzquierda:

mysql> create database linoxidedb;
Query OK, 1 row affected (0.00 sec)

Comprobemos si esta base de datos se crea en LinóxidoMaestroDerecho:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| linoxidedb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

Ahora crearemos una tabla en esta base de datos a partir de LinóxidoMaestroDerecho y verifique desde el otro servidor.
Ejecute el siguiente comando en LinóxidoMaestroDerecho:

mysql> CREATE TABLE linoxidedb.testuser ( id INT, name VARCHAR(20));
Query OK, 0 rows affected (0.40 sec)

Revisemos esta tabla de LinóxidoMaestroIzquierda:

mysql> show tables;
+----------------------+
| Tables_in_linoxidedb |
+----------------------+
| testuser |
+----------------------+
1 row in set (0.00 sec)

Voila. Nuestra réplica está funcionando bien.

Como puede ver, la replicación maestro-maestro no es más que configurar 2 servidores en modo maestro-esclavo entre sí. En la configuración maestro-esclavo, debe asegurarse de que en el servidor esclavo no se ejecute ninguna consulta (excepto las consultas de replicación), de lo contrario, la replicación se interrumpe. Pero en el caso de la replicación Master-Master, la consulta puede ejecutarse en cualquiera de los 2 servidores, lo que nos proporciona un entorno seguro y tolerante a fallos.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar