======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 [[kb:linux:generalites:Benchmark cluster MariaDB Galera|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 :
[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 :
# 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