Galera Mariadb: Load balancing et Failover HAproxy
Après avoir mis en place le cluster Galera Mariadb, nous avons besoin d'un point d'accès au cluster. Ce point d'accès peut être un proxy mysql ou tout autre serveur HA.
Nous allons configurer HAproxy avec l'option leastconn pour qu'il envoie les paquets vers la machine ayant le moins de connexions …
Après avoir mis en place le cluster Galera Mariadb, nous avons besoin d'un point d'accès au cluster. Ce point d'accès peut être un proxy mysql ou tout autre serveur HA.
Nous allons configurer HAproxy avec l'option leastconn pour qu'il envoie les paquets vers la machine ayant le moins de connexions (Load Balancing) et nous allons mettre en place un check http pour qu'en cas de problème sur un noeud, HAproxy ne lui envoie plus de paquets (FailOver).
Pour cela, nous avons besoin du script clustercheck présent ici https://github.com/olafz/percona-clustercheck. Ce script doit être présent sur chaque noeud du cluster mariadb.
Préparation des nœuds du cluster
Toutes les opérations détaillées dans cette section doivent être effectuées sur tous les nœuds du cluster mariadb.
On commence par récupérer le script clustercheck, puis on créé un utilisateur mysql pour l’exécution du script et on place le script au bon endroit
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck mysql> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' chmod +x clustercheck mv clustercheck /usr/bin
L'étape suivante consiste à créer un service xinetd dont la tâche sera de lancer le script clustercheck à la demande.
Création du fichier /etc/xinetd.d/mariadbcheck
:
# default: on # description: mariadbcheck service mariadbcheck { disable = no flags = REUSE socket_type = stream port = 9200 wait = no user = nobody server = /usr/bin/clustercheck clustercheckuser clustercheckpassword! log_on_failure += USERID only_from = 0.0.0.0/0 per_source = UNLIMITED }
Dans le champ only_from, vous pouvez mettre l'adresse ip d'HAproxy si vous le souhaitez (avec un /32 à la fin).
Pour avoir un service propre et bien configuré, on l'ajoute aussi dans
/etc/services
en commentant les anciens services utilisant le port
9200 (service wap, a priori votre serveur ne devrait pas en avoir besoin
:) )
mariadbcheck 9200/tcp # mariadbcheck #wap-wsp 9200/tcp # WAP connectionless session service #wap-wsp 9200/udp # WAP connectionless session service
On redémarre xinetd et on devrait avoir le port 9200 en écoute.
Pour vérifier que ça fonctionne, lancez la commande clustercheck
.
Elle doit renvoyer du text contenant HTTP/1.1 200 OK
qui sera le
retour attendu par HAproxy pour s'assurer que le noeud du cluster est
atteignable.
Configuration d'HAproxy
La plus gros du boulot est fait. Reste à définir le cluster dans HAproxy.
Ceci se fait dans le fichier de conf en y ajoutant à la fin :
listen galera-mariadb 0.0.0.0:3306 balance leastconn option httpchk mode tcp server mariadb01 ip.de.mariadb.01:3306 check port 9200 inter 5000 fastinter 2000 rise 2 fall 2 server mariadb02 ip.de.mariadb.02:3306 check port 9200 inter 5000 fastinter 2000 rise 2 fall 2 server mariadb03 ip.de.mariadb.03:3306 check port 9200 inter 5000 fastinter 2000 rise 2 fall 2
Après avoir redémarré HAproxy, le cluster doit être joignable et on doit pouvoir prouver le load balancing :
[root@haproxy]# mysql -uroot -p -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+---------------+ | Variable_name | VALUE | +-----------------+---------------+ | wsrep_node_name | mariadb01 | +-----------------+---------------+
[root@haproxy]# mysql -uroot -p -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+---------------+ | Variable_name | VALUE | +-----------------+---------------+ | wsrep_node_name | mariadb02 | +-----------------+---------------+
[root@haproxy]# mysql -uroot -p -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+---------------+ | Variable_name | VALUE | +-----------------+---------------+ | wsrep_node_name | mariadb03 | +-----------------+---------------+