MHA(一)介绍


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

 

MHA脚本文件介绍介绍:

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

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

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

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

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

 实例脚本:

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

 

你可能感兴趣的:(MYSQL)