Comment ajouter un nouveau nœud MySQL à un cluster de réplication Galera

Vous avez configuré et installez un cluster Galera pour MySQL.
Vous souhaitez ajouter un nouveau noeud afin de le synchroniser aux serveurs MySQL.
Cela permet de dupliquer les bases de données afin de permettre la haute disponibilité.

Ce tutoriel vous guide pour ajouter un nouveau noeud MySQL à un cluster de réplication Galera.
L'environnement est un MariaDB sur Debian 10.

Comment ajouter un nouveau nœud MySQL à un cluster de réplication Galera

Comment ajouter un nouveau nœud MySQL à un cluster de réplication Galera

Les étapes à réaliser pour ajouter un nouveau serveurs MySQL dans un cluster Galera ne sont pas très compliquées.
Voici la procédure à suivre :

  1. Installer MariaDB / MySQL
  2. Configurer le nouveau noeud sur tous les noeuds du Cluster
  3. Configurer Galera sur le nouveau noeud
  4. Relancez les serveurs MySQL
  5. Enfin démarrez MySQL

Lorsqu'un nouveau nœud rejoint un cluster, il demandera des données au cluster.
Un nœud, appelé donateur (Doner), utilisera une méthode SST (State Snapshot Transfer) pour fournir une copie complète des données au nouveau nœud, appelé jointeur.
A partir de là, le nouveau noeud est à jour avec toutes les bases et tables.

Pour maintenir un quorum sain et éviter les split-brain, il est très important de toujours conserver un nombre impair de nœuds Galera.

Installer MariaDB sur le nouveau noeud

Sur le nouveau noeud, installer MariaDB avec apt :

apt-get install mariadb-server

Ensuite il faut augmenter la limite de fichiers ouverts.
Pour cela, éditez le fichier /etc/systemd/system/mysql.service :

vim /etc/systemd/system/mysql.service

Puis cherchez la ligne LimitNOFile et passez le à infinity :

LimitNOFILE=infinity

Enfin relancez le service daemon :

systemctl daemon-reload

Configurer le nouveau noeud sur tout le cluster

Editez le fichier galera, si vous avez suivi le tutoriel d'installation du cluster, il s'agit du fichier /etc/mysql/mariadb.conf.d/99-galera.cnf
Ajoutez l'adresse IP du nouveau noeud dans le paramètre wsrep_cluster_address.

wsrep_cluster_address=gcomm://51.210.xxx,51.91.xxx,54.38.xxx

Par exemple, pour ajouter 51.255.xxx :

wsrep_cluster_address=gcomm://51.210.xxx,51.91.xxx,54.38.xxx,51.255.xxx

Sur le nouveau noeud, définissez un nouveau nom dans la variable wsrep_node_name.

Ensuite on définit la méthode SST (State Snapshot Transfer) à travers la variable wsrep_sst_method.
Voici un tableau récapitulatif, chaque méthode a ses avantages et inconvénients.

MéthodeVitesseDisponibilité des nœuds en directTypeDB Root Access
mysqldumpLentDisponibleLogiqueDonor et Joiner
rsyncPlus rapideIndisponiblePhysiqueAucun
clonePlus rapideIndisponiblePhysiqueSeulement Doner
xtrabackupRapideIndisponiblePhysiqueOnly Donor
Les méthodes SST de synchronisation Galera

Pour mieux vous y retrouvez, voici un exemple de fichier de configuration galera complet du maître.
Ici la méthode de transfert est par rsync.

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://51.210.xxx,51.91.xxx,54.38.xxx,51.255.xx
binlog_format=row
default_storage_engine=InnoDB
# innodb
innodb_autoinc_lock_mode=2
# Options
wsrep_cluster_name=cluster
wsrep_node_name=master
wsrep_node_address=51.210.xxx
wsrep_sst_method=rsync

Répétez l'opération sur chaque noeud du cluster galera pour étendre la nouvelle configuration du cluster.
Cela comprend le nouveau noeud.

Si vous avez un pare-feu, pensez à autoriser les ports 3306, 4567, 4568, 4444 pour le nouveau noeud.

Initialiser le nouveau noeud et vérifier le fonctionnement

Une fois que la nouvelle configuration est déployée, il faut redémarrer chaque serveur MySQL.
Commencez par le serveur maître puis les différents neouds pour terminer par le nouveau noeud.
Il suffit pour cela de redémarer le service / daemon.

/etc/init.d/mysql restart

Sur le serveur maitre, vérifiez le journal /var/log/mysql/error.log.
Ce dernier doit indiquer que le membre a joint à travers une ligne du type :

WSREP: Member 1.0 (n1) synced with group.

Enfin vérifiez l'état du cluster :

mysql -u root -p -e "show status like 'wsrep_%';"

wsrep_cluster_size doit comporter le nombre total de membre du cluster.
Dans mon cas nous sommes à 4 membres.

Vérifier que le nouveau noeud est bien synchronisé au cluster Galera MySQL

Sur chaque noeud et notamment le nouveau noeud, wsrep_local_state_comment doit être sur synced indiquant que ce dernier se synchronise.
Enfin vérifiez que les bases de données sont bien synchronisées sur le nouveau noeud :

mysql -u root -p -e "show databases;"
Bravo ! vous avez réussi à ajouter un nouveau nœud MySQL à un cluster de réplication Galera.

Liens