阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_perl

MYSQL MHA 的安装估计很多地方都是自动化安装的了,流水线方式。个人安装的MHA 的集群虽然没有几百台,但基本上已经突破了三位数,按理说安装应该是不会出什么奇怪的事情,但实际上每天都有新鲜事。


最近就阴沟里面翻船了,在MHA 的安装过程中遇到了一些错误,废了点劲

故障1 

阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_02


大家可以从图上看出报错的信息,关键错误我沾到下边


 [warning] HealthCheck: Got timeout on checking SSH connection to 10.5.7.76! at /usr/share/perl5/vendor_perl/MHA/HealthCheck.pm line 342.

 - [warning] Failed to SSH to binlog server 10.5.7.76

 - [warning] HealthCheck: Got timeout on checking SSH connection to 10.5.7.77! at /usr/share/perl5/vendor_perl/MHA/HealthCheck.pm line 342.

 - [warning] Failed to SSH to binlog server 10.5.7.77

- [warning] HealthCheck: Got timeout on checking SSH connection to 10.5.7.78! at /usr/share/perl5/vendor_perl/MHA/HealthCheck.pm line 342.

 - [warning] Failed to SSH to binlog server 10.5.7.78

[error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln239] Binlog Server is defined but there is no alive server.


从错误信息看,已经很明确的告知有两个问题  1  SSH timeout 2  由于SSH 连接上有问题,提取binlog 有问题,无法进行获取。


所以问题的关键点就 转移到了SSH 的连接上,经过尝试 SSH 连接的确很慢,初期是怀疑网络问题,但测试 PING  Telnet 等方式都很快,并不像是 网络问题。


所以解决问题的关键点,转移到SSH 为什么连接这么慢,经过查询后,


阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_03


图上的地方的白色就是开始等待时间 较长的地方,大约每次连接SSH就在那个地方需要等待7-10秒左右。

根据相关的文档和类似问题,定位到由于DNS 反向解析的造成的连接较慢的原因。 

相关文档也给出可以在 sshd_config 里面  添加 UseDNS = no 以及 将 GSSAPIAAuthentication no 设置上就不会出现非网络原因的SSH 超时了


但实际上及时修改了上面的SSHD的配置并且从启动SSHD 服务 ,MHA还是继续报同样的错误。


实际上解决这个问题很简单,就是在每台机器的/etc/hosts 上注册机器的地址和IP 之间的 关系,将所有MHA 涉及的机器都放到里面,问题就解决了。


其实这不是什么新鲜的东西,只是以前安装的过程中,LINUX 的系统人员要不就是配置 了,要不就是 DNS 的解析速度并没有导致相关的问题发生。


如果仅仅按照上面的错误提示,大部分的页面都是在提出没有开启BINLOG 导致的,实际上并不是。



故障2 


阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_04


看到上面的问题,提示说找不到文件目录,并且提示要在配置文件中设置BINLOG 的位置,这样的报错,一般发生在 设置了BINLOG (使用GTID)Server 的服务器。


但如果你再次核对你的配置文件,估计也 不会发现什么失误。主要的问题在于你的MYSQL 服务器的BINLOG 的mysql-bin.index 里面注册的当前MYSQL 有的BINLOG 文件数量不一致。


阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_mysql_05


阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_06


阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_mysql_07



可以看到其中一台机器的BINOG 直到了mysql-bin.000001 而其他的已经 到了 000003 , 怎么办, 只需要将所有的MYSQL 的  binlog 的编号统一就可以解决问题了 

阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_08




阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_服务器_09


其实MHA 的配置本身并不难,但设计的东西比较多,并且注意的权限,网络方面的注意,MYSQL本身配置等等在一起就显得混乱,如果没有章法的去做很可能会忽略一些东西,结果就是故障频发,然后还的费劲心里的去解决,所以标准化这个东西在某些这样的事情上就显得非常重要了。

阴沟翻船之 MYSQL MHA  故障 SSH timeout 与  Binlog not found_perl_10