在早期的mysql运维中,主库宕机后,某一台从库提升主库,而其他的从库挂载到新的主库时,比较麻烦,例如:找点位这一步就比较复杂,虽然在开源的,MMM,MHA中,也都实现了自动漂移主库,个人觉得还是趋于复杂,觉得还不如自己切换简单,所以一直都没有上线这样的第三方监控切换程序,
但人工切换,总是违背一些自动化理念,自从MySQL
5.6发版,GTID进入大家视线,我个人觉得这是主库自动化切换的一次历史性革命,为了完全的自动化MySQL主库切换,oracle在脚本工具集,加入了mysqlfailover工具,介绍如下:
oracle自己也意识到,自动切换的必然性;而最近facebook的ppt中也大力介绍了基于GTID的主库切换,MHA
0.56
也加入了GTID主库主库,这就足以说明,我们是时候引入GTID了。
这里我没有直接使用MHA,而是用了mysqlfailover,最大的原因的mysqlfailover是python写的,我们自己好控制把。(一用就发现bug了:在重用连接的时候,如果mysql连接时间太短,会出现alive状态一行)
这里介绍一下我们的整套切换实现流程(这里不介绍GTID的原理),如下图:
一台failover来判断主库宕机,异常不靠谱,因为,在网络环境异常复杂的现状中,完全有可能failover到主库不通,而到从库是通,所以这里,利用3个failover节点