MHA,即MasterHigh Availability Manager and Toolsfor MySQL,是采用perl语言编写的一个脚本管理工具,该工具仅适用于MySQL Replication环境,目的在于维持master主库的高可用性。MHA是自动的master故障转移和slave提升的软件包,基于标准的MySQL复制。MHA包含两个组成部分:MHA Manager(管理节点)和 MHA Node(数据节点)
下载地址:
https://github.com/yoshinorim/mha4mysql-manager
https://github.com/yoshinorim/mha4mysql-node
MHA部署
MHA Manager管理节点可以单独部署在一台独立服务器上管理多个master-slave集群,也可以部署在一台slave上。MHA Manager探测集群中的node节点,当发现master出现故障时,他可以自动将具有新数据的slave提升为新的master,然后将所有其他slave导向新的master上。整个故障转移过程对应用程序是透明的。MHA node数据节点可以运行在每台MySQL服务器上,它通过监控具备解析和清理logs功能的脚本来加快故障转移。
MHA原理
MHA的目的在于维持mysql replication 中master库的高可用性,其最大特点是可以修复多个slave之间的差异日志,最终使所有slave保持数据一致,然后从中选择一个充当新的master,并将其他slave指向它。当master出现故障时,可以通过对比slave之间I/O thread 读取主库binlog的position号,选取最接近的slave作为备选主库。其他的从库可以通过与备选主库对比生成差异的中继日志,在备选主库上应用从原来master保存的binlog,同时将备选主库提升为master。最后在其他slave上应用相应的差异中继日志并从新的master开始复制。
MHA的优缺点
优点
- 故障切换时,可以自行判断哪个从库与主库的数据最接近,然后切换到上面,可以减少数据的丢失,保证数据的一致性
- 支持binlog server,可提高binlog的传送效率,进一步减少数据丢失的风险
- 结合MySQL5.7的增强半同步功能,确保故障切换时数据不丢失
- 自动切换的脚本太简单了,而且比较老化,建议后期逐渐完善
- 搭建MHA架构,需要开启Linux系统互信协议,所以对于系统安全性来说是个不小的考验




