Laboratoire infra Linux HA #3 – RĂ©plication MySQL

Laboratoire infra Linux HA #3 – RĂ©plication MySQL

LAB07-DB-02

Cet article est le troisième opus de la suite d’articles sur la mise en Ĺ“uvre d’une infrastructure Linux visant Ă  servir le blog « lab07.lab Â».

Dans le précédent article nous avons migré la base de données de notre Worpdress à l’aide de mysqldump de scp et avons vu comment importer la base sur notre serveur MySQL lab07-db-01.
Dans cet article on va faire un premier pas vers la résilience de notre infrastructure. Ce ne sera pas encore de la haute disponibilité mais une tolérance de panne intéressante : on va répliquer la base wordpress entre lab07-db-01 , le Master, et lab07-db-02, le Slave.

Ah oui au fait, viens pas m’chercher des poux dans la tĂŞte avec tes “Ouiii mais tu vois, ces appellations de maĂ®tre/esclave ça vient du système oppressif” tout ça… T’es chez ouam et j’m’en carre, juste c’est explicite pour moi et c’est tout (note que ça devrait changer avec la prochaine version de MySQL). Parce que dans tous cas, lisser tous les angles ne fait que mener Ă  l’oubli et au recommencement des erreurs de l’histoire ; c’est bon on peut bosser lĂ  ?

Préparation de lab07-db-02

Je vais pas passer mon temps Ă  te rĂ©Ă©crire toutes les Ă©tapes, ain’t nobody got time for that! Tu fais comme moi et tu lis Ă  nouveau l’article prĂ©cĂ©dent et tu te dĂ©brouilles pour installer Percona MySQL sans tĂ©lĂ©mĂ©trie et tu liras la suite quand c’est prĂŞt.

Tu feras gaffe dans cet article, on passera d’un serveur Ă  l’autre sans que je prĂ©vienne Ă  chaque fois. Mais comme je suis pas que sadique, tu vois le prompt du serveur Ă  chaque dĂ©but de bloc de shell.

L’adresse de MySQL

Si jusqu’ici on s’est pas trop cassĂ© le cul la tĂŞte Ă  savoir si notre BDD MySQL Ă©tait accessible depuis le rĂ©seau ou que via localhost maintenant ça va devenir un vrai sujet. Du coup, plutĂ´t que d’avoir un MySQL de Schrödinger on va paramĂ©trer MySQL pour Ă©couter sur toutes les interfaces de notre hĂ´te lab074-db-01.

ShellSession
root@lab07-db-01:~$ printf "bind-address = 0.0.0.0" >> /etc/mysql/mysql.conf.d/mysqld.cnf
root@lab07-db-01:~$ systemctl restart mysql

Te vautre pas et double bien le “plus grand que” sinon tu vas perdre le reste du fichier ; il est pas vide celui-lĂ .
On procédera de même sur lab07-db-02.

ShellSession
root@lab07-db-02:~$ printf "bind-address = 0.0.0.0" >> /etc/mysql/mysql.conf.d/mysqld.cnf
root@lab07-db-02:~$ systemctl restart mysql

Hiérarchie des SGBD

DĂ©sormais, les serveurs MySQL sont susceptibles de se causer. On va leur en donner l’occasion ! On va attribuer des ID de serveurs Ă  chacun des deux DB et paramĂ©trer le master pour Ă©changer avec le slave.

La réplication des bases de données passe par la création de logs binaires qui seront rejoués par le slave afin de conserver un état identique à celui du master.

Les fichiers de logs binaires portent bien leur nom et ne sont pas lisibles directement avec less ou autre, il faudra passer par un outils adaptĂ©. Il est pas impossible que je rĂ©dige un article un jour sur la maintenance du cette plateforme HA…

ShellSession
root@lab07-db-01:~$ vi /etc/mysql/mysql.conf.d/mysqld.cnf
VimL
[...]
bind-address    = 0.0.0.0

server-id       = 1
log_bin         = /var/log/mysql/mysql-bin.log
expire_logs_days = 1
max_binlog_size = 100M
binlog-format   = row

ShellSession
root@lab07-db-02:~$ vi /etc/mysql/mysql.conf.d/mysqld.cnf
VimL
[...]
bind-address    = 0.0.0.0

server-id       = 2

On va maintenant crĂ©er un utilisateur spĂ©cifique pour gĂ©rer la rĂ©plication entre les serveurs et lui attribuer les droits adaptĂ©s (essaye de lui donner un nom adaptĂ© Ă  sa fonction, genre replication ou replicate ce sera plus facile Ă  maintenir que d’avoir Ă  rĂ©flĂ©chir sur “Bordel Ă  quoi sert ce user ?!” et tant qu’on y est… ne prends le mot de passe que j’ai gĂ©nĂ©rĂ©).

ShellSession
root@lab07-db-01:~$ pwgen -sBc 14 1
9E7tkFVWRvF4sF
root@lab07-db-01:~$ mysql
SQL
mysql> CREATE USER 'roy_batty'@'%' IDENTIFIED BY '9E7tkFVWRvF4sF';
Query OK, 0 rows affected (0,03 sec)

mysql> GRANT replication slave on *.* to 'roy_batty'@'%';
Query OK, 0 rows affected (0,02 sec)

Début (et fin) de réplication

Comme pour la migration de notre db wordpress de lab07-front-01 vers lab07-db-01, on va tirer un dump du MySQL de lab07-db-01 directement dans MySQL sur lab07-db-02. On indiquera ensuite Ă  notre slave MySQL les informations de connexion au master.

ShellSession
root@lab07-db-02:~$ ssh lab07-db-01 'mysqldump --source-data -B wordpress -R --triggers --add-drop-database' | mysql
root@lab07-db-02:~$ mysql
SQL
mysql> CHANGE MASTER TO MASTER_HOST='lab07-db-01' , MASTER_USER='roy_batty', MASTER_PASSWORD='9E7tkFVWRvF4sF', MASTER_PORT=3306;
Query OK, 0 rows affected, 7 warnings (0,05 sec)

mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0,04 sec)

On vĂ©rifiera bien l’Ă©volution de la position dans le binlog sur nos deux serveurs avec les commandes adaptĂ©es selon le contexte : mysql> show (master|slave) status\G.
T’as bien compris ? Tu mets pas les parenthèses ou le pipe dans ton shell MySQL hein ?!

fin de la cassette

Fin de la bande

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *