J'ai installé un cluster de 3 serveurs MariaDB dans une configuration multi-maître qui fonctionne bien. J'ai ajouté un 4ème serveur pour HaProxy pour équilibrer la charge et faire du round robin afin d'avoir un peu de redondance, ce qui fonctionne également, sauf pour un problème.
Je suis connecté au client MySQL sur le serveur HaProxy et j'exécute la requête suivante :
show variables like 'server_id';
J'obtiens les résultats, mais si j'attends une période de 5 secondes ou plus et que j'exécute à nouveau la requête, j'obtiens l'erreur suivante :
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 52
Current database: *** NONE ***
Juste après, j'obtiens le résultat avec un autre server_id, ce qui indique que l'équilibrage de la charge fonctionne. Le problème que cela cause est que lorsque j'essaie de me connecter à partir de mon Spring/Java app, je peux exécuter des requêtes pendant cette courte période de temps et la connexion tombe. Je me dis que si je peux le résoudre sur le serveur HaProxy, cela résoudrait les autres problèmes que j'ai.
EDIT : AJOUTÉ HAPROXY.CFG
global
log 127.0.0.1 local0 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
maxconn 4096
daemon
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
listen mysql-cluster
bind 0.0.0.0:3306
mode tcp
option tcpka
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.10.241:3306 check inter 1000 rise 3 fall 1
server mysql-2 192.168.10.242:3306 check inter 1000 rise 3 fall 1
server mysql-3 192.168.10.243:3306 check inter 1000 rise 3 fall 1
listen stats
bind 192.168.10.211:8080
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth USER:PASSWORD