MySQL--MHA原理

##==============================================================##
MHA(Master High Availability)是一种MySQL高可用解决方案,由日本DeNA公司开发,主要用于在故障切换和主从提高时进行快速切换,并最大程度保证数据一致性。
MHA主要由两部分组成:
一、MHA Manager(管理节点),管理节点部署在群集以外,主要用于按期监测群集中的主节点,并在主从切换时负责管理调度切换流程。
二、MHA Node(数据节点),数据节点部署在每一个群集节点上,负责在主从切换时对比和应用差别日志。


管理节点主要包含如下工具:
masterha_check_ssh              检查MHA的SSH配置情况
masterha_check_repl             检查MySQL复制情况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息

数据节点主要包含如下工具:
save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差别的中继日志事件并将其差别的事件应用于其余的slave
filter_mysqlbinlog              去除没必要要的ROLLBACK事件(MHA已再也不使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

##==============================================================##
MHA知识点:
一、使用SHOW SLAVE STATUS获取各从库的复制进度,肯定拥有主库Binlog最全的从库
    A)    Master_Log_File+Read_Master_Log_Pos肯定从库读取到主库Binlog位置
    B)    Relay_Log_File+Relay_Log_Pos肯定从库存放主库Binlog位置
    C)    Relay_Master_Log_File+Exec_Master_Log_Pos肯定从库执行主库Binlog位置


二、在从库每一个Relay-log的头部,记录主库和从库的版本信息,还记录该relay-log存放的主库binlog开始位置
 

二、从库的Relay-log中每一个binlog事件都包含该事件在主库上的位置信息,根据两个主库binlog位置点从relay-log中能够得到两个从库的差别日志。每一个binlog事务老是以BEGIN为开始标志,以COMMI结束,若是从库未获取到主库完整的BINLOG事务,那么该事务不会被从库应用,以保障数据一致性。
 

三、当复制主库实例宕机时,若是主库服务器仍可使用SSH访问,可使用mysqlbinlog获取到主库最后的BINLOG。

四、使用SELECT MASTER_POS_WAIT(master_log_file,read_master_log_pos)来等待从库应用主库BINLOG到指定位置。

五、MHA会默认关闭RELAYLOG的清理,若是要清理RALAYLOG,可使用下面命令:
SET GLOBAL relay_log_purge=1;
FLUSH LOGS;
SET GLOBAL relay_log_purge=0;


##==============================================================##
MHA工做原理:
 

##==============================================================##
MHA主要特性:
一、MHA切换不依赖实例使用存储引擎和BINLOG格式;
二、MHA不会增长MySQL服务器性能开销,除MHA管理节点外无需增长额外服务器;
三、在MySQL服务器上部署MHA数据节点不会影响当前实例运行;
四、MHA实现自动故障切换,也能够手动触发在线切换;
五、MHA能够实现秒级的故障切换;
六、MHA能够将任意slave提高master,也能够在切换时指定master候选节点;
七、MHA提供扩展接口,容许在MHA切换过程当中的特定时间点执行用户自定义脚本。

##==============================================================##
MHA扩展性
A)seconary_check_script
当检测到master节点链接失败时调用,从多个网络路径判断master是否发生宕机。

B)shutdown_script
在故障转移前调用,能够经过SSH登陆到master节点进行数据库关闭和服务器关机等操做。

C)master_ip_failover_script
在故障转移前和转移到新master节点后调用,用于切换群集使用的VIP或域名或其余操做。

D)report_script
在故障切换完成后被调用,因为通知故障切换的执行结果。

##==============================================================##
MHA支持和限制:
一、只支持BINLOG V4版本,要求MySQL 5.0或更高版本。
二、候选master节点必须开启log-bin参数,若是全部从节点都为开启,则不进行故障转移。
三、在MHA 0.52版本前不支持多master模式
四、MHA默认不支持多级主从复制,经过修改配置文件和设置multi_tier_slave参数
##==============================================================##mysql

MHA原理:https://code.google.com/p/mysql-master-ha/wiki/HowMHAWorks
MHA原理PPT:http://www.slideshare.net/matsunobu/automated-master-failover
MHA安装包:https://github.com/linyue515/mysql-master-ha/
git

##==============================================================##github

相关文章
相关标签/搜索