MySQL高可用架构之MHA
程序员文章站
2022-06-29 08:17:47
一、关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其 ......
一、关于mha
mha(master ha)是一款开源的mysql的高可用程序,它为mysql主从复制架构提供了automating master failover 功能。mha在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,mha会通过与其它从节点获取额外信息来避免一致性方面的问题。mha还提供了master节点的在线切换功能,即按需切换master/slave节点。
相较于其它ha软件,mha的目的在于维持mysql replication中master库的高可用性,其最大特点是可以修复多个slave之间的差异日志,最终使所有slave保持数据一致,然后从中选择一个充当新的master,并将其它slave指向它。
二、mha角色部署
mha 服务有两种角色,mha manager(管理节点)和mha node(数据节点):
mha manager:通常单独部署在一*立的机器上或者直接部署在其中一台slave上(不建议后者),管理多个master/slave集群,每个master/slave集群称作一个application;其作用有二:
(1)master自动切换及故障转移命令运行
(2)其他的帮助脚本运行:手动切换master;master/slave状态检测
mha node:运行在每台mysql服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转移。其作用有:
(1)复制主节点的binlog数据
(2)对比从节点的中继日志文件
(3)无需停止从节点的sql线程,定时删除中继日志
目前mha主要支持一主多从的架构,要搭建mha,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝tmha已经支持一主一从。
我们自己使用其实也可以使用1主1从,但是master主机宕机后无法切换,以及无法补全binlog。master的mysqld进程crash后,还是可以切换成功,以及补全binlog的。
官方介绍:
下图展示了如何通过mha manager管理多组主从复制。可以将mha工作原理总结为如下:
(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
详细过程:
1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置
2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作(这个我这里还没有实现,需要研究)
3.复制dead maste和最新slave相差的relay log,并保存到mha manger具体的目录下
4.识别含有最新更新的slave
5.应用从master保存的二进制日志事件(binlog events)
6.提升一个slave为新的master进行复制
7.使其他的slave连接新的master进行复制
三、mha组件
(1)、 manager工具:
– masterha_check_ssh : 检查mha的ssh配置。
– masterha_check_repl : 检查mysql复制。
– masterha_manager : 启动mha。
– masterha_check_status : 检测当前mha运行状态。
– masterha_master_monitor : 监测master是否宕机。
– masterha_master_switch : 控制故障转移(自动或手动)。
– masterha_conf_host : 添加或删除配置的server信息。
(2)、 node工具(这些工具通常由mhamanager的脚本触发,无需人手操作)。
– save_binary_logs : 保存和复制master的二进制日志。
– apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。
– filter_mysqlbinlog : 去除不必要的rollback事件(mha已不再使用这个工具)。
– purge_relay_logs : 清除中继日志(不会阻塞sql线程)。
(3)、自定义扩展:
-secondary_check_script:通过多条网络路由检测master的可用性;
-master_ip_failover_script:更新application使用的masterip; (需要修改)
-shutdown_script:强制关闭master节点;
-report_script:发送报告;
-init_conf_load_script:加载初始配置参数;
-master_ip_online_change:更新master节点ip地址;(需要修改)
出处: