MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。 MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。
一、MHA的组成
(一)MHA中的角色
MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):
Node 节点(执行层,含 Master/Slave)
Node 节点是 MySQL 数据存储与复制的载体,同时提供 MHA 切换所需的数据修复、binlog 管理工具,核心工具及功能如下:
-
MHA Manager:通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个master/slave 集群称作一个application,用来管理统筹整个集群。
-
MHA Node:运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲node就是用来收集从节点服务器上所生成的bin-log。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。
(二)MHA提供的工具
MHA(Master High Availability)是 MySQL 高可用解决方案,通过 Manager 节点(管理节点)和 Node 节点(数据节点,含 Master、Slave)协同工作,实现 MySQL 主从集群的故障检测、自动切换与数据一致性保障,两者依赖不同工具完成核心任务,具体如下:
Manager 节点(控制中心)
Manager 节点是 MHA 的调度核心,负责监控集群、检测故障、触发切换,核心工具及功能如下:
- masterha_manager:MHA 主进程,是 Manager 节点的 “心脏”。持续监控 Master/Slave 存活状态(通过 SSH 心跳 + MySQL 连接)、主从复制延迟,发现 Master 故障后自动触发切换流程,同时将监控日志输出到指定路径(如
/var/log/mha)。 - masterha_check_ssh:部署前必执行工具,检查 Manager 与所有 Node 节点的 SSH 免密登录连通性。只有确保 Manager 能无密码访问所有 Node,后续切换时才能远程操作 Node 节点,避免 SSH 问题导致切换失败。
- masterha_check_repl:检查 MySQL 主从复制健康状态,包括复制链路是否通畅、Slave 延迟是否过大、binlog 一致性等。可用于部署前验证复制正常性,也可在日常维护中排查复制异常(如 Slave 报错)。
- masterha_master_switch:手动触发主从切换,支持 “故障切换”(Master 宕机后指定新 Master)和 “在线切换”(Master 正常时主动切换角色,如主节点升级)两种模式。
- masterha_conf_host:动态修改 MHA 配置文件,支持在线添加 / 删除 Slave 节点、更新复制参数,无需停止
masterha_manager进程,适配集群动态扩容 / 缩容场景。 - masterha_stop:停止 Manager 节点的
masterha_manager监控进程,多用于集群维护(如重启 MySQL)时临时停止监控,避免误触发切换。 - save_binary_logs:Master 故障时,在 Master 节点(或其备份)上保存未传输的 binlog。若 Master 宕机前有 binlog 未同步到 Slave,此工具可通过 SSH 提取剩余 binlog,后续用于 Slave 数据补全,避免数据丢失。
- apply_diff_relay_logs:在 Slave 节点修复数据差异。切换后需确保所有 Slave 数据一致,此工具会对比 Slave 中继日志与 Master 剩余 binlog,自动补全数据差异,保障新 Master 与 Slave 数据同步。
- filter_mysqlbinlog:过滤 MySQL binlog 中的无效语句(如
CREATE DATABASE、DROP TABLE等)。在数据修复过程中排除无需同步的操作,避免 Slave 执行无效语句报错。 - purge_relay_logs:清理 Slave 节点的中继日志(relay log)。按配置自动保留指定时间 / 大小的中继日志,兼顾数据安全性(避免误删有用日志)和磁盘利用率(防止日志占满磁盘)。
二、MHA的工作原理
-
从宕机崩溃的master保存二进制日志事件(binlog events);
-
识别含有最新更新的 slave ;
-
应用差异的中继日志(relay log) 到其他 slave ;
-
应用从 master 保存的二进制日志事件(binlog events);
-
提升一个 slave 为新 master ;
-
使用其他的 slave 连接新的 master 进行复制。
三、部署MHA
(一)准备实验环境
-
三台主机:master、slave1、slave2
-
操作系统:CentOS
-
配置主机名(/etc/hosts)
-
配置免密码登录
-
每台主机安装MySQL

最低0.47元/天 解锁文章
440

被折叠的 条评论
为什么被折叠?



