Réplication asynchrone de MySQL avec du load balancing en utilisant un serveur Nginx comme frontal

Publié le par BORY DIALLO

Pour assurer une très haute disponibilité et une tolérance aux pannes liées à leurs serveurs de base de données, les entreprises ont opté pour la réplication de ces dernières, soit de façon synchrone ou asynchrone (selon les moyens et l’expertise).

 

Dans ce atelier, nous allons mettre en place un cluster MySQL composé de deux instances (Master-1 & Master-2). Une entité externe (Un serveur Nginx dans notre cas) qui jouera le rôle de load balancer.

 

Config IP

Nginx == 192.168.231.25

Master-1 == 192.168.228.1

Master-2 == 192.168.231.26

Installer mysql sur chacune de deux instances du cluster

# apt install mysql-server

Faire écouter le SGBDR en réseau

# nano /etc/mysql/mysql.conf.d/mysqld.cnf

 

Sur le Master-1

Dans le fichier /etc/mysql/my.cnf


[mysqld]
server-id=2
log_bin=/var/log/mysql/mysql-bin.log
auto_increment_increment=2
auto_increment_offset=1

 

Redémarrer le SGBDR

# service mysql restart

 

Créer un user de réplication

Faire un show master status pour copier les fichiers bin et la position à envoyer sur le second serveur

Faire les mêmes config sur les second master.


Faire écouter le SGBD en réseau, et faire les configs suivantes dans le fichier ci-dessous :

Dans le fichier /etc/mysql/my.cnf
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
auto_increment_increment=2
auto_increment_offset=2

Redémarrer le SGBDR

# service mysql restart

Créer un utilisateur de réplication aussi et lui donner les droits de réplications comme sur le premier master.

 

Activation de la réplication

Arrêter le slave et renseigner les informations du master 1 sachant que vous êtes sur le master 2.

Maintenant prendre les informations du master2 à copier sur le master1

 

Retourner maintenant sur le Master-1 et faire les actions suivantes :

 

Depuis le Master-1, nous pouvons afficher l'état du slave

 

Il attend les événements provenant de l'autre instance !

 

De même sur le Master-2

A cet instant, les deux instances sont synchronisées !

 

III : Occupons-nous à la mise en place du frontal

# apt install curl gnupg2 ca-certificates lsb-release -y

# echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

# curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

# apt update ; apt install nginx -y

 

Configuration
Dans le fichier /etc/nginx/nginx.conf

stream {
    upstream mysqlproxy {
        least_conn;
        server 192.168.228.1:3306 weight=2;
        server 192.168.231.26:3306;
    }
    server {
        listen 3306;

        proxy_pass mysqlproxy;
    }
}

 

Redémarrer Nginx

# service nginx restart

Puisque Nginx est avant tout un serveur Web, il devrait écouter sur le port 80

Rappel :

Nginx == 192.168.231.25
Master-1 == 192.168.228.1
Master-2 == 192.168.231.26

 

Pour tester le fonctionnement, sur l’une des instances, nous allons créer un user auquel nous allons attribuer tous les droits sur toutes les BD, ...

Notre client va se connecter depuis n’importe qu’elle machine du réseau ayant le client MySQL.

Liste des BD

 

Il peut même créer d’autres BD (étant donné qu’il a tous les droits sur toutes les bases de données et leurs tables).

 

Vérifions cela sur Master-2

 

C'est assez clair !!!

Publié dans Bases de données

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article