Heartbeat/mysql: Bascule esclave/maitre
Nous sommes dans la situation où il faut redémarrer le serveur maitre
connection ssh sur les deux serveurs:
sur le maitre
#ssh maitre@IP
Arrêt du service heartbeat sur les deux serveurs
# service heartbeat stop
ou
#/etc/init.d/heartbeat stop
Même chose sur l’esclave
A partir de là, plus personne n’a accès à l’application web
MySql:
on va se placer dans votre homedir
sur les deux serveurs.
#cd /home
sur le serveur esclave, on va récupérer la base mysql et la copier sur le serveur maître:
[esclave]# mysqldump -u root -pMDP votre_bdd > votre_bdd.sql
[esclave]# scp votre_bdd.sql maitre@IP:/home
Passons sur le serveur maître:
[maitre]#cd /home
on injecte la base:
[maitre]# mysql -u root -pMDP votre_bdd.sql > votre_bdd.sql
Maintenant, on va activer la réplication de la base MySql du serveur maître sur l’esclave: sur le serveur maître: tout d’abord on va se connecter sur la base
[maitre]# mysql -u root -pMDP
Puis on bloque la base en lecture seule
mysql>: FLUSH TABLES WITH READ LOCK;
On repère la position de la base:
mysql > SHOW MASTER STATUS;
------------------ ---------- -------------- --------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
------------------ ---------- -------------- --------------------------
| mysql-bin.000003 | 73 | test,bar | foo,manual,mysql |
------------------ ---------- -------------- --------------------------
1 row in set (0.06 sec)
et on note:
mysql-bin.000003
← le log bin à utiliser
73
← la position du log
évidemment à adapter suivant le cas.
sur le serveur esclave:
on se connecte aussi à la base mysql
[esclave]# mysql -u root -pMDP
on stoppe la réplication en cours
mysql>stop slave;
on fait une RAZ de la réplication
mysql>reset slave;
On va positionner le serveur esclave comme le maître:
mysql> CHANGE MASTER TO MASTER_HOST = 'IP', MASTER_USER = 'repli', MASTER_PASSWORD = 'repli', MASTER_LOG_FILE = 'mysql-bin.000003', MASTER_LOG_POS = 73;
on démarre la réplication
mysql> start slave;
on vérifie qu’on n’a pas d’erreur
mysql> show slave statusG
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.94.8.58 Master_User: repli Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 73 Relay_Log_File: GLPI_esclave-relay-bin.000024 Relay_Log_Pos: 660186 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes ****** Last_Errno: 0 Last_Error: ****** Seconds_Behind_Master: 0 1 row in set (0.00 sec)
on se déconnecte de mysql
mysql>exit;
sur le serveur maitre on déverrouille l’écriture sur la base
mysql> UNLOCK TABLES;
on se déconnecte de mysql
mysql>exit;
et pour finir on lance le script de lancement automatique des services heartbeat/mon/http/myslq
:
[maitre]#./startHA
sur le serveur maitre c’est le même script sauf le service Mon en moins:
[esclave]#./startHA
on vérifie que l’IP virtuel est actif sur le serveur maitre:
[maitre]#ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:22:19:D7:73:48
inet adr:10.94.8.56 Bcast:10.94.15.255 Masque:255.255.248.0
UP BROADCAST RUNNING MULTICAST MTU:1492 Metric:1
Interruption:16
et dans le navigateur firefox, on fait un test de connection:
http://appliweb.com
SI TABLE CRASHED :
d’après le log, on repère la table dite crashed
connexion à mysql
:
#mysql -u root -pMDP ;
on sélectionne la base
mysql>use votre_bdd ;
on répare la table
mysql>repair table nomdelatable ;
on sort de mysql
mysql>exit;