6 votes

ERREUR 2006 (HY000) : Le serveur MySQL s'est éteint... (HaProxy / Galera)

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

11voto

Jojje Points 353

Pour une session longue qui est inactive, comme l'exécution de mysql sur la ligne de commande, votre timeout client y timeout server sont beaucoup trop courtes.

Ils conviennent probablement à un serveur web qui utilise la base de données, car la connexion n'est ouverte que le temps nécessaire, et chaque chargement de page crée une nouvelle connexion.

Pour permettre aux connexions de rester ouvertes pendant 10 minutes, modifiez les paramètres suivants

timeout server 5000
timeout client 5000

à

timeout server 10m
timeout client 10m

Vous pouvez aller encore plus haut si vous le souhaitez. J'ai des clusters RDS qui ont un timeout de 7 heures et ça marche très bien.

La documentation contient plus de détails sur client timeout , délai d'attente du serveur et l'abréviation utilisée pour le spécificateur de temps .

-2voto

technoob Points 132

Essayez de configurer max_allowed_packet dans mariaDB. Voici un lien relatif qui pourrait résoudre votre problème.

http://stackoverflow.com/questions/10474922/error-2006-hy000-mysql-server-has-gone-away

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X