有台服务器故障期间的现象:

1、 可以正常ping通

2、 telnet服务端口报Too many connections错误

3、 ssh连接不上

查看MHA的管理日志,在强制关机前的health check都是正常的

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

这点比较奇怪,因此在测试集群上模拟生产的问题做了测试

1、 模拟压测制造master Too many connections

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

2、 观察MHA管理日志,与生产环境相似

3、 查看HealthCheck.pm代码,原来是长连接

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

【测试kill掉health check长连接】

管理日志中记录建立连接时Too many connections的报错,但不会发生切换,每隔10秒做一次ping检测

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

【测试kill掉health check长连接&停止MHA管理进程】

再次启动MHA管理进程时会报错

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

【解决思路】

1、 已发生Too many connections的问题,想办法尽快把master搞死

尝试ssh连接到本机上shutdown mysql服务,ssh连接不上的情况下,联系NOC重启或关机

2、 每台服务器本地部署一个检测和扩连接的脚本

3、 还有一个思路是,改进当前调整connections的逻辑,对每台服务器维护一个连接池或建立一个长连接

4、 最佳的方案是不采用one-thread-per-connection的连接方式,改用pool-threads。

遗憾的是在MySQL官方版本上这个是收费的,一些公司使用的是Percona。

【原创】MHA对MySQL master Too many connections错误的处理机制-LMLPHP

05-11 13:13