MYSQL MHA 的安装估计很多地方都是自动化安装的了,流水线方式。个人安装的MHA 的集群虽然没有几百台,但基本上已经突破了三位数,按理说安装应该是不会出什么奇怪的事情,但实际上每天都有新鲜事。
最近就阴沟里面翻船了,在MHA 的安装过程中遇到了一些错误,废了点劲
故障1
大家可以从图上看出报错的信息,关键错误我沾到下边
[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 为什么连接这么慢,经过查询后,
图上的地方的白色就是开始等待时间 较长的地方,大约每次连接SSH就在那个地方需要等待7-10秒左右。
根据相关的文档和类似问题,定位到由于DNS 反向解析的造成的连接较慢的原因。
相关文档也给出可以在 sshd_config 里面 添加 UseDNS = no 以及 将 GSSAPIAAuthentication no 设置上就不会出现非网络原因的SSH 超时了
但实际上及时修改了上面的SSHD的配置并且从启动SSHD 服务 ,MHA还是继续报同样的错误。
实际上解决这个问题很简单,就是在每台机器的/etc/hosts 上注册机器的地址和IP 之间的 关系,将所有MHA 涉及的机器都放到里面,问题就解决了。
其实这不是什么新鲜的东西,只是以前安装的过程中,LINUX 的系统人员要不就是配置 了,要不就是 DNS 的解析速度并没有导致相关的问题发生。
如果仅仅按照上面的错误提示,大部分的页面都是在提出没有开启BINLOG 导致的,实际上并不是。
故障2
看到上面的问题,提示说找不到文件目录,并且提示要在配置文件中设置BINLOG 的位置,这样的报错,一般发生在 设置了BINLOG (使用GTID)Server 的服务器。
但如果你再次核对你的配置文件,估计也 不会发现什么失误。主要的问题在于你的MYSQL 服务器的BINLOG 的mysql-bin.index 里面注册的当前MYSQL 有的BINLOG 文件数量不一致。
可以看到其中一台机器的BINOG 直到了mysql-bin.000001 而其他的已经 到了 000003 , 怎么办, 只需要将所有的MYSQL 的 binlog 的编号统一就可以解决问题了
其实MHA 的配置本身并不难,但设计的东西比较多,并且注意的权限,网络方面的注意,MYSQL本身配置等等在一起就显得混乱,如果没有章法的去做很可能会忽略一些东西,结果就是故障频发,然后还的费劲心里的去解决,所以标准化这个东西在某些这样的事情上就显得非常重要了。