美河学习在线 www.eimhe.com
1
MySQL LVS+Keepalived+MHA 高可用群集 应用部署操作手册
部署业务
LVS+Keepalived+MHA
编写日期
2015 年 9 月 9 日
编写人
eimhe.ocm
版本
V1.1
美河学习在线 www.eimhe.com
美河学习在线 www.eimhe.com
2
版本变更历史
时间(年月日)
版本号
描述
编写人
2014-12-9
1.0
形成手册
Eimhe.com
2014-12-19
1.0
完成初稿,但不确定架构是否正确
Eimhe.com
2015-09-09
1.1
确认架构,完成第一个 GA 版本
Eimhe.com
美河学习在线 www.eimhe.com
3
第1章 MHA 架构介绍
MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,
它由日本人 youshimaton 开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提
升的高可用软件。在 MySQL 故障切换过程中,MHA 能做到 0~30 秒之内自动完成数据库的故障
切换操作,并且在进行故障切换的过程中,MHA 能最大程度上保证数据库的一致性,以达到
真正意义上的高可用。
MHA 由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager
可以独立部署在一台独立的机器上管理多个 Master-Slave 集群,也可以部署在一台 Slave 上。
当 Master 出现故障是,它可以自动将最新数据的 Slave 提升为新的 Master,然后将所有其他
的 Slave 重新指向新的 Master。整个故障转移过程对应用程序是完全透明的。
1.1 存在隐患
在 MHA 自动故障切换的过程中,MHA 试图从宕掉的主服务器上保存二进制日志,最大程度
保证数据的不丢失,但这并不总是可行的。
例如,如果主服务器硬件故障或无法通过 SSH 访问,MHA 没有办法保存二进制日志,只能
进行故障转移而丢失了最新数据。
拓:MySQL 服务挂了,但是可以从服务器拷贝二进制。但如果硬件宕机或者 SSH 不能连接,
不能获取到最新的 binlog 日志,如果复制出现延迟,会丢失数据。
使用 MySQL5.5 的半同步复制,可以大大降低数据丢失的风险。MHA 可以和半同步复制结
合起来。如果只有一个 Slave 已经收到了最新的二进制日志,MHA 可以将最新的二进制日志
应用于其他所有 Slave 服务器上,保持数据一致性。
最新版 0.56 版本,增加了支持 GTID 的功能,建议在 MySQL5.6 及之后版本使用。MySQL5.5
建议使用管理节点版本 0.55,数据节点 0.54。
1.2 适用场景
目前 MHA 主要支持一主多从的架构,要搭建 MHA,要求一个复制集群必须最少有 3 台数据
库服务器,一主二从,即一台充当 Master,一台充当备用 Master,另一台充当从库。出于成
本考虑,淘宝在此基础上进行了改造,目前淘宝开发的 TMHA 已经支持一主一从。
美河学习在线 www.eimhe.com
4
1.3 MHA 工作原理
Master
Slave-1 Slave-2
MySQL
-3
Master
Slave-1 Slave-2
MySQL
-1
MHA
Manager
Master
Slave-1 Slave-2
MySQL
-2
1. 从宕机崩溃的 Master 保存二进制日志事件(binlog event);
2. 识别含有最新更新的 Slave;
3. 应用差异的中继日志(relay log)到其他 Slave;
4. 应用从 Master 保存的二进制日志事件;
5. 提升一个 Slave 为新的 Master;
6. 使其他的 Slave 连接新的 Master 进行复制;
1.4 MHA 的组成
MHA 软件由两部分组成,Manager 工具包和 Node 工具包,具体如下。
1. Manager 工具包情况如下:
masterha_check_ssh:检查 MHA 的 SSH 配置情况。
masterha_check_repl:检查 MySQL 复制状况。
masterha_manager:启动 MHA。
masterha_check_status:检测当前 MHA 运行状态。
masterha_master_monitor:检测 Master 是否宕机。
masterha_master_switch:控制故障转移(自动或手动)。
masterha_conf_host:添加或删除配置的 server 信息。
2. Node 工具包(通常由 MHA Manager 的脚本触发,无需人工操作)情况如下:
美河学习在线 www.eimhe.com
5
save_binary_logs:保存和复制 Master 的 binlog 日志。
apply_diff_relay_logs:识别差异的中级日志时间并将其应用到其他 Slave。
filter_mysqlbinlog:去除不必要的 ROOLBACK 事件(已经废弃)
purge_relay_logs:清除中继日志(不阻塞 SQL 线程)
重:为了尽可能的减少因为主库硬件损坏宕机造成的数据丢失,因此在配置 MHA 的同时建议
必须配置 MySQL5.5 半同步复制。
拓展思想:为了保证数据一致性,MySQL 复制中,常常会在 Master 上使用 sync_binlog 参数
保证 binlog 持久化,保证数据一致性。但这种方式对磁盘 I/O 会造成 10~20%的影响。但是
还有另外一个思路,就是使用 MySQL 半同步复制来保证数据一致性,MySQL 半同步复制是在
从服务器的内存中处理数据并进行发聩,虽然也会造成性能影响,但是相对于对 Master 造成
的磁盘 I/O 的影响来说,反而是个更好的方法。据《高性能 MySQL》 第三版中 10.9 的测试,
写入远程的内存(一台从库的反馈)比写入本地的磁盘(写入并刷新)要更快。使用半同步
复制相比主在主库上进行强持久化的性能有两倍的改善。