我们在 amazon ec2 上设置了 3 节点 PXC 集群。它已经工作了大约 4-5 个月。自上周以来,由于 MySQL 连接限制超出错误,每个节点都开始出现故障。我们增加了但max_connections
仍然没有帮助。自上周以来,我们有大约 1-2 小时的停机时间。
当一个节点失败(客户端连接失败)时,我登录到那个 MySQL 服务器并且我能够做一个SHOW FULL PROCESSLIST
但它只有 20-30 个连接。同时,当我尝试通过另一个终端连接到同一台服务器时,我收到了超出连接限制的错误消息。所以我做了一个netstat -na | grep 3306 | wc -l
,从负载均衡器 ip 到 3306 端口的连接正好有 500 个,有TIME_WAIT
状态。
max_connect_errors 1000000
max_connections 500
设置如下。
App1 ---> Haproxy1 ---> PXC Node1 App2 ---> Haproxy2 ---> PXC Node2 App3 ---> Haproxy3 ---> PXC Node3
每个haproxy配置1个活跃的mysql节点和2个备份服务器
server SQL1 xx.xx.xx.xx:3306 check port 50000 inter 3000 maxconn 160 rise 3 fall 3 backup
server SQL2 xx.xx.xx.xx:3306 check port 50000 inter 3000 maxconn 160 rise 3 fall 3
server SQL3 xx.xx.xx.xx:3306 check port 50000 inter 3000 maxconn 160 rise 3 fall 3 backup
我们还使用 percona 的 clustercheck 脚本在 xinex.d 的帮助下监控端口 50000 上的 mysql 节点
有什么建议么?
观察 #1
您有max_connect_errors到 1000000(一百万)。如果你遇到那么多连续的连接失败,你只需运行
FLUSH HOSTS;
以清除阻塞的连接。鉴于该设置的高价值,您将永远不需要运行FLUSH HOSTS;
观察#2
我很高兴你提到你的
TIME_WAITs
. 我在 ServerFault 上写了这篇文章Feb 01, 2012
:MySQL lowering wait_timeout value to lower number of open connections。这有点 hack,但在这种情况下是必要的。简而言之,只需在每个 PXC 节点上运行它
这将使 TIME_WAITs 在 1 秒内超时。每次节点重新启动时,您都必须运行这些行。
TIME_WAIT
。