我在一个多主机设置中设置了一个由3台MariaDB服务器组成的集群,运行良好。我为HaProxy添加了第4台服务器,用于负载平衡和循环,这样我们就可以有一些冗余,这也是工作的,除了一个问题。
我登录到运行以下查询的MySQL服务器上的HaProxy客户端:
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服务器上解决它,那将解决我正在处理的其他问题。
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
发布于 2015-10-21 13:40:55
对于空闲的长时间运行会话,比如在命令行上运行mysql
,您的timeout client
和timeout server
太短了。
对于访问DB的web服务器来说,它们可能是可以的,因为连接只在需要时才会打开,而且每次加载页面都会创建一个新的连接。
若要允许连接保持10分钟的打开,请更改
timeout server 5000
timeout client 5000
至
timeout server 10m
timeout client 10m
如果你愿意,你可以走得更高。我有RDS集群,它有一个7个小时的超时时间,它工作得很好。
这些文档有更多关于超时客户端、超时服务器和用于时间说明符的短手操作的详细信息。
发布于 2015-10-21 00:21:06
尝试在max_allowed_packet
中配置mariaDB。这里有一个相对的链接,可以解决您的问题。
http://stackoverflow.com/questions/10474922/error-2006-hy000-mysql-server-has-gone-away
https://serverfault.com/questions/730403
复制相似问题