Table des matières
Monter cluster MariaDB Galera avec HAproxy
Un cluster Galera est un cluster de bases de données de type MySQL/MariaDB, avec a minima 3 nœuds, chacun des nœuds pouvant être Master.
Ça permet d'obtenir de meilleurs performances, mais aussi de la redondance. J'ai réalisé rapidement un benchmark que vous pouvez trouver ici.
Mais attention, l'installation d'un cluster MariaDB nécessitera de bien faire attention aux règles de parefeu et aux bases de sécurité.
Installation et configuration d'un Cluster Galera
Pour cela, on installe la dernière version de MariaDB sur l'ensemble des nœuds :
# apt update
# apt install -y mariadb-server
Ensuite on va arrêter le service :
# systemctl stop mariadb
Puis on va créer un fichier sur CHAQUE serveur :
- /etc/mysql/mariadb.conf.d/51-galera.cnf
[galera] wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so binlog_format=row default_storage_engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_cluster_name=galera1 wsrep_cluster_address=gcomm://192.168.1.211,192.168.1.212,192.168.1.213
Les deux dernières lignes sont a adapté selon votre infrastructure.
Une fois configuré sur chaque nœud, on va sur le premier nœud, lancer la commande :
# galera_new_cluster
L'ensemble des bases de données de ce nœud seront déployé sur les autres nœuds.
ensuite, il vous suffira de lancer les daemon MariaDB sur l'ensemble des autres nœuds :
# systemctl start mysql
Vous pouvez vérifiez que le cluster est vivant en vérifiant le nombre de nœud actif :
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec)
Configuration de HAProxy
Il existe plusieurs solutions pour équilibrer les requêtes, l'une des plus simples est HAProxy.
HAProxy a un système de vérification d'état spécialement pour MariaDB/MySQL, pour cela il s’appuie sur un compte SANS AUTHENTIFICATION. Il faut donc que le nom d'utilisateur soit non déterminable par une personne malveillante.
Dans cette exemple, ce sera haproxy12345.
Pour commencer on va le créer dans le cluster avec comme spectre l'IP du serveur HAproxy :
MariaDB [(none)]> CREATE USER 'haproxy12345'@'192.168.1.210'; Query OK, 0 rows affected (0.023 sec)
Ensuite, sur le serveur HAProxy, on va l'installer :
# apt update
# apt install -y haproxy
puis ajouter dans le fichier /etc/haproxy/haproxy.cfg :
listen mysql-cluster bind 0.0.0.0:3306 mode tcp option mysql-check user haproxy12345 balance roundrobin server sql1 192.168.1.211:3306 check server sql2 192.168.1.212:3306 check server sql3 192.168.1.213:3306 check
Après, redémarrez le service HAproxy pour rendre le serveur opérationnel :
# systemctl restart haproxy
Redémarrage d'un cluster a froid
Un cluster MariaDB Galera n'aime pas du tout être arrêté. Il y a donc une petite manipulation pour relancer le cluster.
Pour cela, sur le noeud avec les modifications les plus récentes, modifiez la valeur safe_to_bootstrap a 1 dans le fichier /var/lib/mysql/grastate.dat comme ceci :
- /var/lib/mysql/grastate.dat
# GALERA saved state version: 2.1 uuid: 39d3c447-8706-11ea-b589-02ca185f3e79 seqno: -1 safe_to_bootstrap: 1
puis toujours sur ce même noeud, lancez la commande :
# galera_new_cluster
Le service devrait a présent être lancé sur le serveur, a partir de maintenant vous devriez pouvoir relancer les services MariaDB sur les autres serveurs avec la commande :
# systemctl start mysql