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.
Table des matières
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 :
- Installer MariaDB / MySQL
- Configurer le nouveau noeud sur tous les noeuds du Cluster
- Configurer Galera sur le nouveau noeud
- Relancez les serveurs MySQL
- 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.
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éthode | Vitesse | Disponibilité des nœuds en direct | Type | DB Root Access |
---|---|---|---|---|
mysqldump | Lent | Disponible | Logique | Donor et Joiner |
rsync | Plus rapide | Indisponible | Physique | Aucun |
clone | Plus rapide | Indisponible | Physique | Seulement Doner |
xtrabackup | Rapide | Indisponible | Physique | Only Donor |
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.
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.
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;"