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