错误 2006 (HY000):MySQL 服务器已消失... (HaProxy / Galera)

错误 2006 (HY000):MySQL 服务器已消失... (HaProxy / Galera)

我在多主服务器设置中设置了 3 个 MariaDB 服务器集群,运行良好。我为 HaProxy 添加了第 4 个服务器,用于负载平衡和循环调度,这样我们就可以拥有一些冗余,除了 1 个问题外,它也能正常工作。

我登录了 HaProxy 服务器上的 MySQL 客户端并运行以下查询:

show variables like 'server_id';

我得到了结果,但如果我等待 5 秒或更长时间并再次运行查询,我会收到以下错误:

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    52
Current database: *** NONE ***

之后,我立即获得了具有不同 server_id 的结果,这表明负载平衡正在工作。这导致的问题是,当我尝试从我的 Spring/Java 应用程序连接时,我可以在很短的时间内运行查询,然后连接断开。我想如果我可以在 HaProxy 服务器上解决这个问题,那将解决我遇到的其他问题。

编辑:添加 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

答案1

对于长时间运行的空闲会话(例如mysql在命令行上运行),您的timeout clienttimeout server太短了。

对于访问数据库的 Web 服务器来说,它们可能没问题,因为连接只会在需要时才打开,并且每次页面加载都会创建一个新的连接。

要允许连接保持打开状态 10 分钟,请更改

timeout server 5000
timeout client 5000

timeout server 10m
timeout client 10m

如果需要,您还可以设置得更高。我有一个 RDS 集群,其超时时间为 7 小时,但运行良好。

文档中有更多关于超时客户端超时服务器以及用于时间说明符

答案2

尝试在 mariaDB 中配置max_allowed_packet。这里有一个相关链接,可能会解决您的问题。

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

相关内容