Réplication MySQL croisée


Technique

Introduction

Le principe de la réplication MySQL croisée est de mettre en place un système qui permet de synchroniser en temps réel des serveurs MySQL.

L’intérêt de ce système est multiple :

  • Doubler les données en cas de panne d’un serveur.
  • Partager la charge des serveurs.
  • Resynchroniser les serveurs après une panne.

Nous allons ici aborder la configuration de deux serveurs que nous nommerons “BDD01” et “BDD02” où BDD01 sera répliqué en temps réel sur BDD02 et où BDD02 sera répliqué en temps réel sur BDD01.

 

Configuration

Les deux serveurs doivent pouvoir communiquer entre eux. Pour ce faire, vous devez modifier la configuration des serveurs MySQL.

Sur le serveur BDD01, modifiez le fichier my.cnf puis ajoutez les élément suivants à la section [mysqld] :

log-bin=bdd01-bin
server-id= ; Nombre entiter
master-host= ; Adresse IP du serveur BDD02
master-port=3306 ; Port de connexion à MySQL
master-user=slavebdd02 ; Utilisateur qui a les droits de réplication
master-password=slavebdd02 ; Mot de passe utilisateur

Sur le serveur BDD02, modifiez le fichier my.cnf puis ajoutez les élément suivants à la section [mysqld] :

log-bin=bdd02-bin
server-id= ; Nombre entiter
master-host= ; Adresse IP du serveur BDD01
master-port=3306 ; Port de connexion à MySQL
master-user=slavebdd01 ; Utilisateur qui a les droits de réplication
master-password=slavebdd01 ; Mot de passe utilisateur

Gestion des droits

Sur le serveur BDD01, créez l’utilisateur slavebdd02 avec les droits de réplication :

mysql> GRANT REPLICATION SLAVE ON *.* TO slavebdd02@'%' IDENTIFIED BY slavebdd02;

Sur le serveur BDD02, créez l’utilisateur “slavebdd01” avec les droits de réplication :

mysql> GRANT REPLICATION SLAVE ON *.* TO slavebdd01@'%' IDENTIFIED BY slavebdd01;

Démarrer la réplication BDD02[master] -> BDD01[slave]

Sur le serveur BDD02, vous devez vérifier la position du master :

mysql> SHOW MASTER STATUSG

*************************** 1. row ***************************
File: bdd02-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

Sur le serveur BDD01, exécutez les commandes suivantes :

mysql> CHANGE MASTER TO
MASTER_HOST='',
MASTER_USER=slavebdd02,
MASTER_PASSWORD=slavebdd02,
MASTER_LOG_FILE='bdd02-bin.000001',
MASTER_LOG_POS=107;

mysql> START SLAVE ;

Démarrer la réplication BDD01[master] -> BDD02[slave]

Sur le serveur BDD01, vous devez vérifier la position du master :

    mysql> SHOW MASTER STATUSG

*************************** 1. row ***************************
File: bdd01-bin.000001
Position: 148
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

Sur le serveur BDD02, exécutez les commandes suivantes :

mysql> CHANGE MASTER TO
MASTER_HOST='',
MASTER_USER=slavebdd01,
MASTER_PASSWORD=slavebdd01,
MASTER_LOG_FILE='bdd01-bin.000001',
MASTER_LOG_POS=148;

mysql> START SLAVE;

CONCLUSION

Il y a plusieurs manières de faire face à des problématiques de forte charge sur une infrastructure, la réplication peut être l’une de ces solutions, notamment parce qu’elle offre de la redondance à vos données, ce qui est plus efficace qu’un simple back-up quotidien.
Néanmoins, tout dépend de l’ampleur de votre projet et si celui-ci nécessite ou non de la haute disponibilité. Il est conseillé toutefois de bien analyser les besoins avant de mettre en place une infrastructure trop complexe, surtout qu’il sera toujours possible d’appliquer cette méthode à posteriori.

Laisser un commentaire