原文地址:https://code.google.com/p/mysql-master-ha/wiki/Architecture
其他整理过的MHA文档: mysql-master-ha Overview
香打同学的mysql-master-HA other solutions
当master崩溃后,MHA以下面的方式恢复其他的slave。
图:恢复的步骤
(基本的算法描述在作者 MySQL Conference and Expo 2011演讲slide的13和34页)
1 |
mysqlbinlog --start-position=12345 mysqld-bin.000013 mysqld-bin.000014…. |
如果挂掉的master通过SSH可达,并且二进制日志可以访问(非H/W失败,例如master上的InnoDB数据文件损坏),binlog events可以被保存。
· 丢失的event可以通过检查最新的slave的{Master_Log_File, Read_Master_Log_Pos} 以及mysqlbinlog来确认。
· 使用半同步复制可以极大的减少event的丢失。
在slaves的relay log上,master的二进制日志位置写入到end_log_pos部分。通过slave之间最新的end_log_pos 对比,我们可以定位relay log event是否送达每一个slave。MHA通过这个机制在内部恢复slaves(修复一致性问题)。除了MySQL Conf 2011中slide介绍的基本算法之外,MHA进行了一些优化和增强,例如快速产生不同的relay log,执行基于行格式的恢复工作等。
MHA 组件
MHA由MHA Manager和MHA Node组成,由下图所示:
MHA Manager有一些管理程序,例如监控MySQL master、控制master故障转移等。
MHA Node具有故障转移辅助脚本,例如解析MySQL二进制/relay日志,识别需要应用到其他slave的relay log的位置,应用event到目标slave等。MHA Node需要运行在每一个MySQL server上。
当MHA Manager故障转移后,MHA manager通过SSH连接MHA Node,并在需要时执行MHA Node命令。
自定义扩展
MHA有一系列扩展,例如,MHA可以调用任意自定义脚本来更新master的IP地址(更新全局catalog数据库以管理master的IP地址,更新虚IP等)。只是因为管理IP地址依赖于用户的环境,而MHA不能强制使用某个解决方法。
当前扩展如下,MHA Manager中包含了一些示例脚本:
secondary_check_script
: 用于在多网络路由的情况下,检查master的可用性
master_ip_failover_script
: 用于更新master的IP地址
shutdown_script
: 用于强制关闭master
report_script
: 用于发送报告
init_conf_load_script
: 用于加载初始化配置参数
master_ip_online_change_script
: 用于更新master IP地址,这并不用于master故障转移,而是用户在线master切换
jjjjjjj
呵呵,非商业,只是尝试下新活动~
今天早上刚开的玩笑= =