当前位置: 首页 > 工具软件 > MHA > 使用案例 >

MHA(一)介绍

华心思
2023-12-01


MHA背景介绍:

MHA 是Perl语言写的,开源的MYSQL故障切换方案;全称:Master High Availability,故障切换时间10-30s

有人说,我不要MHA行不行啊; 可以,没问题, 如果数据库故障了,自己手动去登陆从库,然后CHANGE MASTER;

那问题来了,首先你这样得耗费多少时间;其次,你的几个SLAVE,你还得一个个对比,看谁执行的BINLOG比较新一些吧; 

这个时候,业务无法访问了,一堆人站你旁边看着你,到时候一紧张再忘记开写了、SLAVE挂不上去,这个影响时间就不是一星半点了;

所以就有人写了个程序,来执行自动主从故障切换解决这个问题;

 

MHA工作原理:

MHA组成:

 MHA由node和manager组成;

        node:

                就是所有数据库机器都需要部署的, master是一个node,slave也是一个node; 相当于监控客户端;

        manager: 

               Manager相当server,它会对node进行管理,配置检查,binlog和relay log的获取,执行切换任务等; 可以单独部署在server上(推荐),单独部署可以管理多套主从架构。也可以部署在某一个slave上; 如果部署在slave上,那么该slave就无法 被升级为主库;

  MHA切换主要涉及下面几个步骤:

1, MHA每隔3秒钟探测一次MASTER; (Hi, 你还活着吗?)

        ping_interval 控制间隔时间;

        ping_type 控制探测方式,SELECT(执行SELECT 1)和CONNECT(创建连接/断开连接)

        

2, 如果manager探测到MASTER 故障,无法访问,Manager会执行下面操作:

      a, 从其他node发起,检查主库是否能够SSH上去;

      b  从其他node发起连接,检查MASTER实例是否能够登陆;

     

3, 如果所有Node均连接失败,则开始故障转移,步骤如下:

Phase 1Configuration Check Phase..检查数据库版本
检查是否启用
GTID
检查从库是否存活
检查配置文件的
candidate
Phase 2Dead Master Shutdown Phase.该阶段会调用master_ip_failover脚本;去关闭所有NodeIO Thread
调用shutdown_script 强制关闭MASTER实例,防止应用程序来连接;
Phase 3Master Recovery Phase.. 
Phase 3.1Getting Latest Slaves Phase.检查所有节点,从show slave status中对比获取最新的binlog/position
Phase 3.2Saving Dead Master's Binlog Phase..如果老的Master可以SSH,上去获取BINLOG,从positionEND位置,获取这段BINLOGMASETER产生这段BINLOG,还未来得及发送给SLAVE)将这部分日志发送给Manager节点(manager_workdir位置)
如果故障
Master无法SSH,则无法获取这段日志
Phase 3.3Determining New Master Phase..对比所有SLAVE,从最新SALVE中同步差异realy log给其他slave;最终确保所有SLAVE数据一致
Phase 3.3New Master Diff Log Generation Phase..确认新master 是否为最新slave,如果不是,则从最新slave获取差异日志;
manager上获取的BINLOG日志发送给new master
Phase 3.4Master Log Apply Phase..对比新masterExec_Master_Log_PosRead_Master_Log_Pos,判断恢复的位置;
在本地回放
3.3 Phase的差异日志;
获取新
masterbinlogposition
Phase 4Slaves Recovery Phase.. 
Phase 4.1Starting Parallel Slave Diff Log Generation Phase.对每个SLAVE恢复:所有SLAVE和最新Slave做对比,如果position不一致,则生产差异日志
Phase 4.2Starting Parallel Slave Log Apply Phase.每个SLAVE 应用差异日志;
执行
CHANGE MASTER 挂在到新Master
Phase 5New master cleanup phase..reset slave all;

 

MHA脚本文件介绍介绍:

在已安装的Node节点上,执行 可以查看Node安装包和Manager安装包锁包含的脚本文件;

查看Node脚本: rpm -ql mha4mysql-node-0.56-0.el6.noarch 

1apply_diff_relay_logs识别差异的中继日志,并将其应用到其他SLAVE
2filter_mysqlbinlog去除掉不必要的ROLLBACK事件,已废弃,默认不启用
3purge_relay_logs清理relay logs,不会阻塞SQL线程
4save_binary_logs保存binlogrelay log日志

查看Manager脚本:rpm -ql mha4mysql-manager-0.56-0.el6.noarch 

1masterha_check_repl切换前检查复制的运行情况
2masterha_check_ssh检查SSH连接
3masterha_secondary_check从其他网络路由检查主库的可用性
4masterha_check_status返回MYSQL主库状态监控信息;
5masterha_conf_host从配置文件中增加或者删除host
6masterha_manager监控Master可用性,如果master故障,则执行故障切换
7masterha_master_monitor监控主库的可用性
8masterha_master_switch执行主从切换
9masterha_stop停掉MHA Manager进程

 实例脚本:

1master_ip_failover自动切换时,VIP的管理脚本,
2master_ip_online_change在线切换时,VIP的管理,不是必须的 
3power_manager 电源管理脚本
4send_report发送告警脚本

 

 类似资料: