MHA(master high availability) 是用来保证 Mysql 集群高可用性的,对 master 进行监控,发现 master 出现故障后,自动进行故障转移,从众多 slave 中选举出新的 master,并使其他 slave 与新 master 进行同步
主要特点是故障处理速度快,最大程度上保证数据不丢失
工作原理
当 master 出现故障后,MHA 会尽快抢救数`据,尝试到 master 中获取二进制日志,如果不是物理故障,通常可以成功拿到
选举出新的 master,规则是看哪个 slave 上的数据是最新的
找出最新 slave 后,其他 slave 会对比最新 slave 的数据,看自己有哪些差距,形成差异日志
如果从故障 master 中成功获取了二进制日志的话,会在这个最新 slave 上进行回放,保证数据一致
把这个最新 slave 提升为新的 master
其它 slave 应用相应的差异日志,并开始从新的 master 开始复制
优势
(1)故障处理速度快
一般在 30s 内就可以完成
(2)数据安全性好
slave 之间使用差异日志,保证了数据的一致,通过半同步复制的配合,几乎可以保证数据不丢失
(3)易扩展
使用 Perl 开发,开源,开放接口,支持其他语言开发扩展
修改原有功能代码和扩展开发都很方便
(4)可以监控多个集群
一个 MHA 管理服务器可以管理多个集群
不足
(1)只监控 master
MHA 只保证了 master 的高可用,并没有监控 slave 的状态,例如某 slave 出现复制中断、延迟增加等问题,都是不知道的
(2)没有集成虚拟IP的配置
在故障转移时,为使对外透明,需要使用虚拟IP,MHA没有自动实现VIP,需要我们自己实现
(3)安全问题
MHA 要求所有服务器之间都配置SSH免登录,存在一定的安全隐患,如果某台服务器出现了安全问题,那么就可能影响其他服务器
2018-08-11 13:43 micwin