Bienvenidos sean a este post, hoy veremos como configurar los servidores para replicacion.
En este post veremos todas las configuraciones necesarias para establacer en los servidores que actuaran como amos y esclavos, todo esto que comentaremos aqui tambien es valido para los entornos de replicacion de origenes multiples, mas adelante cuando hablemos de ese tipo de replicacion hablaremos sobre las diferencias, para establecer los entornos de replicacion se requiere al menos los siguientes pasos:
- Configurar un nuevo amo de replicacion
- Configurar uno o mas esclavos
- La carga de datos desde el amo
- Iniciar al esclavo
- Chequear si los esclavos estan corriendo
Comencemos a hablar de como establecer un entorno de replicacion, lo primero que haremos es establecer al menos un amo, esta va a ser la tarea mas facil dado que es un servidor simple de mariadb que tiene un ID unico y mantiene un log binario, el ID debe ser establecido en el amo y en los esclavos, este debe ser unico, tambien debe ser un valor entero de cuatro bytes, su valor minimo es 1, si no se establece o su valor es 0 desactiva la replicacion, y como dijimos anteriormente debe tener activo el log binario dado que sera el encargado de almacenar los eventos y enviarlos a los esclavos, tal como dijimos en este post, el archivo de configuracion necesita contener lineas similares a las siguientes:
server-id=1
log_bin="binlog"
binlog_format=STATEMENT
De estas lineas hay dos que poseen variables dinamicas:
- @@server_id
- @@binlog_format
Las cuales nos permiten modificar sus valores en ejecucion sin necesidad de reiniciar el servidor, veamos un ejemplo:
MariaDB [(none)]> SET @@server_id = 1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SET @@binlog_format = 'MIXED';
Query OK, 0 rows affected (0.03 sec)
Por ultimo tenemos la variable @@log_bin pero esta al no ser dinamica debemos reiniciar el servidor, luego debemos crear al menos un usuario para los esclavos de la replicacion, hablando estrictamente un esclavo solo necesita el privilegio REPLICATION SLAVE para trabajar apropiadamente, aunque si algunas bases de dato no deben ser replicadas simplemente no se le concede el permiso sobre estas bases, es posible utilizar esta cuenta entre todos los esclavos e inclusive se puede usar una cuenta que es usada con otros clientes, sin embargo desde que la password es almacenada como texto en un archivo llamado master.info por lo general es utilizar distintas passwords para cada una de ellos, tambien para mejorar la seguridad a los datos se deberia establecer que el usuario solo pueda conectarse desde un host, como vimos en este post, tambien es una buena idea forzar a que el usuario lo haga por medio de SSL, a continuacion veamos un ejemplo de como crear una cuenta de replicacion segura:
MariaDB [test]> CREATE USER 'mslave1'@'host10' IDENTIFIED BY 'somepwd';
Query OK, 0 rows affected (0.00 sec)
MariaDB [test]> GRANT REPLICATION SLAVE ON *.* TO 'mslave1'@'host10' REQUIRE SSL;
Query OK, 0 rows affected (0.00 sec)
No confundan el privilegio REPLICATION SLAVE con REPLICATION CLIENT porque este ultimo privilegio debe ser asignado al usuario que ejecuta configuracion de replicacion y diagnosticos, esto nos garantiza poder ejecutar las instrucciones SHOW MASTER STATUS y SHOW SLAVE STATUS, recuerden que no se debe usar al usuario root en los servidores de produccion salvo que sea estrictamente necesario.
Con nuestro amo y usuario de esclavo creados podemos pasar a crear al esclavo de la replicacion, estos pasos que haremos podemos repetirlo por cada uno de los esclavos que agreguemos, al igual que los amos cada esclavo debe tener su ID, en los esclavos no es necesario activar el log binario pero si lo queremos usar como amo de otro esclavo, por ejemplo para una replicacion circular de la cual hablamos en este post, y si bien esto nos puede ser util para tener otro backup pero puede afectar a la performance, a continuacion cual es la minima linea que debemos agregar en el archivo de configuraciones para activar un esclavo:
server-id=2
Con esta solo linea activamos al esclavo, pero como dijimos este esclavo puede ser el amo de otro y para ello debemos activar el log binario para almacenar todo lo que recibe de su amo y luego enviarlos a sus esclavos, sin embargo los eventos replicados no son almacenados en el log por defecto, para replicarlos debemos activar el log binario y establecer el valor de la variable @@log_slave_updates con ON, esta variable no es dinamica y por lo tanto debemos reiniciar el servidor, ahora veamos un ejemplo que podemos usar en el archivo de configuraciones para un esclavo que puede trabajar como amo:
server-id=2
log_bin="binlog"
binlog_format=STATEMENT
log_slave_updates=ON
Como pueden observar es muy similar a cuando creamos el amo pero en esta ocasion agregamos a la variable que mencionamos antes para almacenar loe eventos replicados, con esto comentado pasemos a ver como iniciar al esclavo.
Si el amo todavia no tiene datos establecer una replicacion entre amo y esclavo sera super sencillo y directo, con nuestro amo y esclavo iniciados procedamos a realizar los siguientes pasos:
- Bloquear al amo con bloqueo global, esto nos asegura que no comenzara a trabajar antes de que sean iniciados los esclavos
- Obtener las coordenadas del log binario, cuando decimos coordenadas nos referimos a los nombres de los archivos de log actualmente en uso y la posicion del ultimo evento escrito
- Desbloquear al amo
- Proveer al esclavo de toda la informacion necesaria para acceder al amo, esto lo hacemos con la instruccion CHANGE MASTER TO
- Estas operaciones deben repetirse en cada esclavo
Veamos un ejemplo de como obtener las coordenadas del log binario:
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.04 sec)
MariaDB [(none)]> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000031 | 323 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.02 sec)
MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
En este caso primero bloqueamos todas las tablas del amo, luego por medio de SHOW MASTER STATUS obtenemos las coordendas del log binario y por ultimo desbloqueamos nuevamente las tablas, con estos datos ya sabemos desde que lugar comenzara a replicar el esclavo, nuestro siguiente paso sera usar la instruccion CHANGE MASTER TO para indicarle al esclavo desde que amo debe replicar, veamos un ejemplo basico de como hacerlo:
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST = '10.0.176.100',
-> MASTER_USER = 'slave01',
-> MASTER_PASSWORD='somepwd',
-> MASTER_PORT = 5000,
-> MASTER_LOG_FILE = 'binlog.000031',
-> MASTER_LOG_POS = 323;
Query OK, 0 rows affected (0.23 sec)
Pasamos todos los datos necesarios como son la direccion IP (puede ser el hostname tambien), el usuario que debe usar, su contraseña, el puerto desde donde debe conectarse, y los datos que obtuvimos anteriormente, si todo esta perfecto y si los permisos estan bien asignados al usuario solo nos resta iniciar el servidor y para ello debemos usar la siguiente instruccion:
MariaDB [(none)]> START SLAVE;
Antes de pasar al ultimo tema debemos mencionar que todos los parametros se pueden modificar despues de configurados pero en todos los casos debemos detener temporalmente al esclavo, veamos un ejemplo:
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB [(none)]> CHANGE MASTER TO MASTER_PASSWORD = 'my_new_pwd';
Query OK, 0 rows affected (0.22 sec)
MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
Es bien simple, detenemos al esclavo, luego hacemos el cambio que debemos hacer y por ultimo lo volvemos a iniciar, este reinicio tambien reiniciara el thread del esclavo, pasemos al ultimo tema.
Nuestro ultimo tema sera el chequeo de si el esclavo esta corriendo, para ello podemos usar la instruccion SHOW SLAVE STATUS la cual nos devolvera un monton de datos pero entre ellos los que necesitamos, a continuacion veamos un ejemplo de salida con solamente los campos que necesitamos:
MariaDB [(none)]> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
…
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
…
Last_Error:
…
2 rows in set (0.02 sec)
A continuacion veamos una descripcion de estas columnas:
- Slave_IO_State (*), el estado actual del thread de E/S
- Slave_IO_Running, muestra si el thread de E/S esta conectado y corriendo
- Slave_SQL_Running (*), el estado actual del thread de SQL
- Last_Error, el ultimo error encontrado por el esclavo
(*) Estos datos son como los obtenidos por SHOW PROCESSLIST
Si todo esta bien las columnas Slave_IO_Running y Slave_SQL_Running deberian estarr con el valor de Yes, si el valor es distinto de Yes tanto la columna Slave_IO_State como Last_Error deberian ayudarnos a identificar el error, veamos un ejemplo:
error connecting to master 'slave1@127.0.0.1:3310' - retry-time: 10 retries: 86400 message: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
En resumen, hoy hemos visto como configurar una replicacion, los pasos basicos que deberiamos hacer para configurarla, como establecer al amo, como crear al usuario para el esclavo, como establecer al esclavo, como obtener las coordenadas para el esclavo, como hacer el cambio al amo y por ultimo com verificar que este funcionando, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
