MHA 架构
MHA 是由日本籍工程师youshimaton 开发,是一套在Mysql 高可用性环境下进行故障切换和主从提升的软件。在Mysql 故障切换过程中,MHA 可以做到0~30s 内的自动故障切换,并且在切换过程中,可以最大程度的保证数据的完整性和一致性,已达到真正意义的高可用。
MHA 由两部分组成:MHA Manager(管理节点和) MHA Node (数据节点) 。MHAManager 可以单独部署在一台机器上,也可以部署在某个slave 节点,可以管理多个master-slave 集群。MHA Node 需要在每台机器上部署,MHA Manager 会定时探测集群中的master 节点,当master 出现故障时,可以自动将最新数据的slave 提升为新的master,然后将所有其他的slave 重新指向新的master。
在MHA 自动故障切换过程中,MHA 试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失,但是如果主服务硬件故障或SSH 无法访问,无法保存二进制日志,只进行故障转移却丢失最新数据,又或者Mysql 启用了GTID 复制模式,即使SSH 访问OK,MHA 也不会考虑复制二进制日志应用到新主库。为了最大程度的避免主库日志丢失,建议MHA与 5.7 的增强半同步复制结合使用。即使只有一台slave 收到最新的二进制日志,MHA 也可以将最新的二进制日志应用于其他的slave 服务器,来保证集群间的一致性。
MHA 工作原理
传统复制模式(非GTID):
1)从宕机奔溃的的master 保存二进制日志事件;
2)识别含有最新数据的slave;
3)应用差异的中继日志(Relay Log)到其他的slave;
4)应用从master 保存的二进制日志事件;
5)提升一个slave 为新的master;
6)其他slave 重新连接到新的master 进行复制;
GTID 复制模式:
1)识别含有最新更新的slave 节点;
2)复制差异的BingLog 数据到其他slave节点;
3)提升一个slave 节点为master;
4)其他slave 重新连接到新的master 进行复制;
从以上可以看出,传统复制模式与GTID 复制模式在处理逻辑上有一些不同,如果启用了GTID 。需要打开从库的log-slave-updates,来减少数据的丢失风险。
MHA 的工具包
Manager 工具包主要包括以下几个工具:
masterha_check_ssh:检测MHA 的ssh 配置状况。
masterha_check_repl:检测Mysql 复制状态。
masterha_manager:启动MHA 服务。
masterha_check_status:检测当前MHA 运行状态。
masterha_master_monitor:监测master 是否宕机。
masterha_master_switch:监控故障转移(自动或手动)。
master_conf_host:添加或删除配置的server 信息。
Node 工具包(通常有Manager 脚本触发):
slave_binary_logs:保存和复制master的二进制日志。
apply_diff_relay_logs:识别差异的中继日志事件,并将其差的事件应用于其他的slave。
purge_relay_logs:清除中继日志(不会阻塞SQL线程)。
MHA主要特性
1)MHA切换不依赖实例使用存储引擎和BINLOG格式;
2)MHA不会增加MySQL服务器性能开销,除MHA管理节点外无需增加额外服务器;
3)在MySQL服务器上部署MHA数据节点不会影响当前实例运行;
4)MHA实现自动故障切换,也可以手动触发在线切换;
5)MHA可以实现秒级的故障切换;
6)MHA可以将任意slave提升master,也可以在切换时指定master候选节点;
7)MHA提供扩展接口,允许在MHA切换过程中的特定时间点执行用户自定义脚本。
MHA可扩展性
1)seconary_check_script
当检测到master节点连接失败时调用,从多个网络路径判断master是否发生宕机。
2)shutdown_script
在故障转移前调用,可以通过SSH登录到master节点进行数据库关闭和服务器关机等操作。
3)master_ip_failover_script
在故障转移前和转移到新master节点后调用,用于切换群集使用的VIP或域名或其他操作。
4)report_script
在故障切换完成后被调用,用于通知故障切换的执行结果。
MHA支持与限制
1)只支持BINLOGV4版本,要求MySQL 5.0或更高版本。
2)候选master节点必须开启log-bin参数,如果所有从节点都为开启,则不进行故障转移。
3)在MHA0.52版本前不支持多master模式
4)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/