MySQL 8 Master Slave

MYSQL REPLICACIÓN MAESTRO/ESCLAVO

Veremos una de las arquitecturas más utilizadas, donde tendremos un master de mysql para escrituras/lecturas y nodos en modo slave para solo lecturas, permitiéndonos repartir la carga entre varias máquinas para las lecturas utilizando por ejemplo HAProxy, del cual haremos un post de como utilizarlo en pfsense debido a la gran acogida de los posts de este blog al respecto.

Esta instalación la vamos a realizar en centos, pero entendiendo el concepto podréis realizarla en cualquier distro porque es básicamente lo mismo cambiando solo la forma de instalación.

Master

Empezamos actualizando

yum -y update

Nos descargamos la versión más actual o la que os guste, como comenté en el post Cluster Mysql 8 Centos utilizaremos la versión 8.0.20 una versión que me ha dado cero problemas respecto a las superiores.

wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-libs-8.0.20-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-8.0.20-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.20-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-server-8.0.20-1.el7.x86_64.rpm

Instalamos

rpm -Uvh mysql-community-*

Habilitamos el servicio y lo arrancamos

systemctl enable mysqld
systemctl start mysqld

Durante la instalación nos crea un password de root temporal que podemos localizar con el siguiente comando:

grep 'temporary password' /var/log/mysqld.log

Teniendo la password securizamos la instalación.

mysql_secure_installation

Nos irá haciendo preguntas

Lo primero es establecer la nueva password de root

Nos preguntará si queremos remover los usuarios anónimos, le indicamos que Yes.

A continuación si queremos que root se pueda loguear remotamente. Aquí lo mejor es decir que no y luego darle permiso remoto desde nuestra ip siempre y cuando sea fija.

Continua preguntándonos si queremos borrar la base de datos de test, le decimos que si.

Y por último si queremos aplicar haciendo un Reload privileges.

Ahora editamos my.cnf

nano /etc/my.cnf

indicándole el directorio de datos, siempre me gusta ponerlo en /data previamente creado, el id que tendrá y activaremos binlog ya que sin el no seríamos nadie en este escenario, quedando de la siguiente manera (no entraremos en otros detalles ya que cada uno tendrá que hacer el tuning correspondiente para conseguir el mejor performance)

datadir=/data
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server-id=1
log_bin=mysql-bin

Reiniciamos el servicio

systemctl restart mysqld

Y procedemos a crear un usuario para las réplicas. Vamos a suponer que nuestro master tiene la ip 172.17.17.1 y nuestro slave la 172.17.17.2

mysql -u root -p

CREATE USER 'replicate'@'172.17.17.2' IDENTIFIED BY 'passwordreplica';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.17.17.2';

Si quisiéramos tener una segunda réplica con la ip 172.17.17.3 pues lo mismo pero cambiamos la ip. Dos réplicas es un buen número para la mayoría de escenarios.

CREATE USER 'replicate'@'172.17.17.3' IDENTIFIED BY 'passwordreplica';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.17.17.3';

Una vez tenemos esto vamos a ver la posición en la que tenemos el master para luego indicarse la a los slaves, esta posición no va a cambiar hasta que trabajemos con este mysql. Como seguimos dentro de la consola de mysql ejecutamos

SHOW MASTER STATUS\G

Y nos devolverá esto

File: mysql-bin.000005
Position: 722

Tener en cuenta que si ya tenéis un mysql y queréis añadirle una réplica tendréis que bloquear el trabajo en ella, es decir, que no haya cambios porque si no te será imposible, ya que cada vez que ejecutes la orden anterior te devolverá una posición diferente.

Bueno nos quedamos con el usuario que hemos creado y este último dato.

 

Slave

Mismos pasos que hemos realizado en el maestro hasta la edición del my.cnf

nano /etc/my.cnf 

Donde lo único que cambiará es el id del servidor, si tenéis más replicas pues vais aumentando este server id.

datadir=/data
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


server-id=2
log_bin=mysql-bin

Reiniciamos servicio

systemctl restart mysqld

Nos conectamos a la consola de mysql

mysql -u root -p

Y escribimos

STOP SLAVE;

CHANGE MASTER TO
MASTER_HOST='172.17.17.1',
MASTER_USER='replicate',
MASTER_PASSWORD='passwordreplica',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=722;
START SLAVE;

Como hemos comentado anteriormente, le estamos indicando quien es el maestro, el usuario que utilizaremos y la posición en la que está, si está posición ha cambiado, fallará.

Podemos comprobar el estado ejecutando en la consola

SHOW MASTER STATUS\G

Donde nos dará muchos datos sobre la réplica, siendo un parámetro importante el estado

Podemos observar que ha leído todo y está esperando a más actualizaciones del master.

Como siempre un placer y buen fin de semana.

TL.

 

Gracias por leer nuestros posts.

No hay comentarios

Comenta la entrada