Infra CRX - Reconstruction du cluster MYSQL GTID Actif/Passif

Soumis par f4eyq le

Reconstruction du cluster MYSQL GTID Actif/Passif
Date : 17/10/2018

MARIADB 10.1
DEBIAN 9.5

root@crx-hyp01 ~ # cat /etc/mysql/mariadb.conf.d/50-server.cnf  | grep id | grep -v 'pid'
gtid-domain-id  =       1
server_id       =       1

Le serveur crx-bck01 ne rempli plus correctement son rôle de serveur SLAVE MYSQL (erreur de réplication MYSQL);
Et le serveur crx-hyp01 est le serveur MASTER MYSQL. 

Les données MYSQL du serveur hyp01 se trouvent dans:  /var/lib/mysql2    avec le volume logique : /dev/mapper/vg__data_store-crx--hyp01--mysql01--disk

Le serveur MASTER porte l'ID 1, et le SLAVE le 2 comme défini dans leur configuration : 

root@crx-hyp01 ~ # cat /etc/mysql/mariadb.conf.d/50-server.cnf  | grep id | grep -v 'pid'
gtid-domain-id  =       1
server_id       =       1 

 

root@crx-bck01 mysql-data # cat /etc/mysql/mariadb.conf.d/50-server.cnf  | grep id | grep -v 'pid'
gtid-domain-id  =       2
server-id               = 2

On va commencer par backuper ttes les données du MASTER et récupérer la position de l'index MYSQL, ce backup va se faire via un SNAPSHOT LVM. 

root@crx-hyp01 ~ # mysql -e "FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; system lvcreate -s -L 1G -n snap /dev/mapper/vg__data_store-crx--hyp01--mysql01--disk; UNLOCK TABLES;"
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |   127911 |              |                  |
+-------------------+----------+--------------+------------------+

​​

Avec cette commande on a créé un SNAPSHOT LVM du volume de données MYSQL,
puis affiché le status du MASTER MYSQL pour avoir le nom du log binaire et la position courante.

Avant de transférer les données sur le SLAVE pour le mettre à jour, on va calculer la clé de position GTID :

MariaDB [(none)]> SELECT BINLOG_GTID_POS("master-bin.000001", 127911);
+----------------------------------------------+
| BINLOG_GTID_POS("master-bin.000001", 127911) |
+----------------------------------------------+
| 1-1-433                                      |
+----------------------------------------------+
1 row in set (0.00 sec)

On peut maintenant attaquer les opérations sur le SLAVE : 
Les data MYSQL se trouve dans /data_crxbck01/crx-bck01/mysql-data/ 

On coupe le MYSQL, on efface les données, on syncronise avec RSYNC celle du serveur MASTER. 

Ensuite on relance MYSQL, on coupe toute réplication existante;
On initialise le pointeur GTID SLAVE à la position 1-1-433

Enfin on active la réplication via la commande MYSQL CHANGE MASTER : 

root@crx-bck01 mysql-data # /etc/init.d/mysql stop
root@crx-bck01 mysql-data # cd /data_crxbck01/crx-bck01/mysql-data/
root@crx-bck01 mysql-data # rm -fr *
root@crx-bck01 mysql-data # rsync -apPtul -e 'ssh -p [PORTSSH_DU_MASTER]' [IP_DU_MASTER]:/mnt/mysql_snap/ /data_crxbck01/crx-bck01/mysql-data/
root@crx-bck01 mysql-data # /etc/init.d/mysql start
=> stop slave; 
MariaDB [(none)]> SET GLOBAL gtid_slave_pos = "1-1-433";
MariaDB [(none)]> CHANGE MASTER TO master_host="[IP_DU_MASTER]", master_port=3306, master_user="[USER_REPLI]", master_password="[PASS_REPLICATION]", master_use_gtid=slave_pos;
start slave;
show slave status \G;

Le show slave status \G;   doit afficher ceci  ( cela indique que nos données sont bien répliquées ) : 

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Master_Server_Id: 1
...
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 1-1-XXXX
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids: