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