======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