MySQL数据库高可用(MHA)详细方案与部署教程
一:MHA简介
核心功能
二:MHA工作原理
三:MHA组件
四:MHA 架构与工具
MHA架构
Manager关键工具
Node工具
五:工作原理与流程
1: 故障检测
2: 故障切换(Failover)
3 : 切换模式
六:与其他高可用方案对比
七:实际应用场景
八: 总结
一:MHA简介
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在较大程度上保证主从数据库数据的一致性,以达到真正意义上的高可用。
搭建教程地址:手把手教你搭建MySQL高可用解决方案(MHA)
核心功能
-
自动故障检测与切换:主库故障时,自动选举最优从库(Slave)晋升为新主库。
-
数据一致性保障:通过应用未同步的二进制日志(Binlog)补全数据差异。
-
手动切换支持:支持人工触发主从切换(如维护场景)。
-
多节点管理:支持管理多个主从复制集群。
二:MHA工作原理
-
当master出现故障时,通过对比slave之间I/O线程读取master上binlog的位置,选取最接近的slave做为最新的slave(latest slave)。
-
其它的slave通过与latest slave对比生成差异中继日志,并应用。
-
在latest slave上应用从master保存的binlog,同时将latest slave提升为master。
-
最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制.
三:MHA组件
-
MHA Manager(管理节点)
MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具手动实现master故障切换、在线mater转移、连接检查等等。一个Manager可以管理多 个master-slave集群
-
MHA Node(数据节点)
MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。
四:MHA 架构与工具
MHA架构
-
Manager节点:核心控制节点,负责监控主库状态、协调故障切换。
-
Master节点:当前主库,负责处理写请求。
-
Slave节点:从库,复制主库数据,故障切换时可能晋升为新主库。
-
VIP(虚拟IP):可选组件,用于对外提供透明的访问入口。
Manager关键工具
工具 | 说明 |
---|---|
masterha_check_ssh | 检查节点间SSH免密登录配置 |
masterha_check_repl | 验证主从复制配置是否正确 |
masterha_manager | 启动MHA,主监控进程,持续检查主库健康状态 |
masterha_check_status | 检测当前MHA运行状态 |
masterha_master_monitor | 监测master是否宕机 |
masterha_master_switch | 控制故障转移(自动或手动) |
masterha_conf_host | 添加或删除配置的server信息 |
Node工具
工具 | 说明 |
---|---|
save_binary_logs | 保存和复制master的二进制日志 |
apply_diff_relay_logs | 识别差异的中继日志事件并应用于其它slave |
filter_mysqlbinlog | 去除不必要的ROLLBACK事件(MHA已不再使用这个工具) |
purge_relay_logs | 清除中继日志(不会阻塞SQL线程) |
五:工作原理与流程
1: 故障检测
-
Manager节点 定期通过
ping
或执行SQL命令(如SELECT 1
)检测主库存活状态。 -
若主库连续无响应,触发 故障判定。
2: 故障切换(Failover)
-
选举新主库:
-
选择数据最接近原主库的从库(通过对比
SHOW SLAVE STATUS
中的Exec_Master_Log_Pos
)。 -
优先选择已开启
log_slave_updates
的从库(确保其Binlog完整)。
-
-
数据补全:
-
从原主库服务器(若可访问)或存活的从库获取未同步的Binlog。
-
将缺失的Binlog事件应用到新主库,确保数据一致性。
-
-
切换拓扑:
-
将其他从库指向新主库,重建复制关系。
-
更新应用连接的VIP或配置,指向新主库。
-
3 : 切换模式
-
自动切换(Automatic Failover):主库不可用时自动触发。
-
手动切换(Manual Switchover):人工干预,常用于维护场景。
六:与其他高可用方案对比
方案 | MHA | Galera Cluster | InnoDB Cluster |
---|---|---|---|
架构 | 主从复制+自动切换 | 多主同步复制 | 基于Group Replication |
数据一致性 | 最终一致性 | 强一致性 | 强一致性 |
复杂度 | 低 | 高 | 中 |
适用场景 | 读写分离,主库故障切换 | 多活写入,低延迟 | 云原生集成,自动化管理 |
七:实际应用场景
-
电商大促:主库突发故障时,快速切换保障订单交易。
-
金融系统:通过Binlog补全确保账户余额一致性。
-
物联网日志存储:读写分离架构下主库宕机不影响数据写入。
八: 总结
MHA 是MySQL主从架构下简单高效的高可用解决方案,尤其适合对数据一致性要求较高且运维资源有限的场景。尽管其功能不如Galera或InnoDB Cluster全面,但在传统主从复制架构中仍具有不可替代的价值。实际使用中需结合监控工具(如Prometheus)和告警系统,形成完整的高可用保障体系。