MySQL MHA高可用配置是企业级数据库架构中保障业务连续性的核心方案之一,尤其在数据中台、数字孪生和数字可视化等对数据实时性与稳定性要求极高的场景中,其重要性不言而喻。MHA(Master High Availability)是一款开源的MySQL主从高可用自动故障切换工具,由Yoshinori Matsunobu开发,专为解决MySQL主库宕机后快速恢复服务而设计。它不依赖第三方存储或集群软件,仅通过SSH和MySQL原生复制机制实现,部署轻量、响应迅速、配置灵活,是中小型至中大型企业构建高可用MySQL集群的首选方案之一。
MHA架构由四个核心组件构成:Manager节点、Master节点、Slave节点 和 VIP(虚拟IP)。每个组件在集群中承担明确职责:
📌 关键提示:MHA不提供读写分离,也不替代分库分表,其唯一目标是最小化主库宕机导致的业务中断时间,通常可在10~30秒内完成自动切换。
确保所有节点(Manager、Master、Slave)满足以下基础条件:
# 示例:配置SSH互信(在Manager节点执行)ssh-keygen -t rsa -b 2048ssh-copy-id root@master-nodessh-copy-id root@slave1-nodessh-copy-id root@slave2-node在Master节点开启二进制日志和服务器ID:
# /etc/my.cnf[mysqld]server-id=1log-bin=mysql-binbinlog_format=ROWrelay-log=relay-binrelay-log-index=relay-bin.indexread-only=0在每个Slave节点配置:
server-id=2 # 每个节点唯一relay-log=relay-binrelay-log-index=relay-bin.indexread-only=1重启MySQL服务后,在Master上创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';FLUSH PRIVILEGES;在Slave节点执行CHANGE MASTER TO:
CHANGE MASTER TO MASTER_HOST='master-ip', MASTER_USER='repl', MASTER_PASSWORD='StrongPass123!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;START SLAVE;验证复制状态:
SHOW SLAVE STATUS\G确保 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 同时为Yes。
在所有MySQL节点(Master和Slave)安装MHA Node:
# CentOS/Rocky Linuxyum install -y epel-releaseyum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiReswget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpmrpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpm在Manager节点安装MHA Manager:
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpmrpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm⚠️ 注意:MHA对Perl模块依赖严格,若安装失败,请使用
cpan手动安装缺失模块。
在Manager节点创建配置目录并编写配置文件:
mkdir -p /etc/mha/app1vim /etc/mha/app1/app1.cnf配置内容如下:
[server default]manager_workdir=/var/log/mha/app1manager_log=/var/log/mha/app1/manager.logremote_workdir=/var/log/mha/app1ssh_user=rootrepl_user=replrepl_password=StrongPass123!ping_interval=3master_binlog_dir=/var/lib/mysqlmaster_ip_failover_script=/usr/local/bin/master_ip_failovershutdown_script=/usr/local/bin/power_managerreport_script=/usr/local/bin/send_report[server1]hostname=master-ipport=3306candidate_master=1check_repl_delay=0[server2]hostname=slave1-ipport=3306candidate_master=1check_repl_delay=0[server3]hostname=slave2-ipport=3306no_master=1✅
candidate_master=1表示该节点优先成为新主库;check_repl_delay=0忽略复制延迟检查,适用于低延迟环境。
为实现应用无感知切换,需部署VIP漂移脚本。创建 /usr/local/bin/master_ip_failover:
#!/usr/bin/env perluse strict;use warnings FATAL => 'all';use Getopt::Long;my $vip = '192.168.1.100/24';my $key = '1';my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";my $command;my $orig_master_host;my $new_master_host;GetOptions( 'orig_master_host=s' => \$orig_master_host, 'new_master_host=s' => \$new_master_host,);if ($new_master_host) { system($ssh_start_vip); print "Added VIP $vip on $new_master_host\n";} else { system($ssh_stop_vip); print "Removed VIP $vip from $orig_master_host\n";}exit 0;赋予执行权限:
chmod +x /usr/local/bin/master_ip_failover在Manager节点执行健康检查:
masterha_check_ssh --conf=/etc/mha/app1/app1.cnfmasterha_check_repl --conf=/etc/mha/app1/app1.cnf输出中若显示 OK,则表示SSH和复制均正常。
nohup masterha_manager --conf=/etc/mha/app1/app1.cnf --ignore_last_failover &查看状态:
masterha_check_status --conf=/etc/mha/app1/app1.cnf正常输出应为:app1 (pid:12345) is running(0:PING_OK)。
为验证MHA有效性,可手动关闭Master节点MySQL服务:
systemctl stop mysqld观察Manager日志:
tail -f /var/log/mha/app1/manager.log您将看到类似日志:
Sat Apr 6 10:20:15 2024 - [info] Master is down!Sat Apr 6 10:20:20 2024 - [info] New master is slave1-ipSat Apr 6 10:20:25 2024 - [info] VIP 192.168.1.100 is moved to slave1-ip
应用连接VIP地址(192.168.1.100)的程序将自动恢复写入,无需修改任何代码或配置。
| 场景 | 建议 |
|---|---|
| 高并发写入 | 使用MHA + 读写分离中间件(如ProxySQL)分离读流量 |
| 跨机房部署 | 将Manager部署在第三机房,避免“脑裂” |
| 监控告警 | 集成Prometheus + Alertmanager,监控MHA状态与复制延迟 |
| 备份策略 | 每日全备 + binlog增量备份,避免切换后数据丢失 |
| 版本兼容 | MySQL 8.0需使用MHA 0.58+,并启用mysql_native_password认证 |
| 方案 | 优势 | 劣势 |
|---|---|---|
| MHA | 轻量、免费、快速切换、无需额外中间件 | 仅支持MySQL原生复制,不支持多主 |
| Galera Cluster | 多主同步、强一致性 | 性能损耗大,网络敏感,部署复杂 |
| InnoDB Cluster | 官方支持、自动组复制 | 依赖MySQL Shell,资源占用高 |
| ProxySQL + MHA | 支持读写分离 | 配置复杂,运维成本高 |
在数据中台和数字可视化系统中,快速恢复写入能力比强一致性更重要。MHA在10秒内完成切换的能力,远超大多数商业方案的恢复时间目标(RTO),是性价比最高的选择。
当您的系统规模扩大,或对高可用有更高要求时,建议结合自动化运维平台与监控告警体系进行增强。例如,将MHA切换事件写入企业微信/钉钉机器人,或集成到Ansible自动化流程中,实现“故障自愈”。
同时,为确保数据安全,建议定期进行切换演练,每季度至少一次,避免“平时不练,急时慌乱”。
如果您正在构建面向数字孪生的实时数据平台,且希望降低数据库运维复杂度,不妨考虑申请试用&https://www.dtstack.com/?src=bbs 提供的数据库高可用管理方案,它已集成MHA核心逻辑并支持一键部署。
对于正在规划数据中台架构的企业,稳定可靠的MySQL高可用是底层基石,申请试用&https://www.dtstack.com/?src=bbs 可帮助您快速搭建企业级数据库集群。
若您的团队缺乏专职DBA,又希望实现7×24小时零中断服务,申请试用&https://www.dtstack.com/?src=bbs 提供的自动化高可用解决方案,是值得信赖的起点。
在数字可视化系统中,数据延迟超过30秒即影响决策效率;在数字孪生场景中,主库宕机30秒可能导致模型失真。MHA正是解决这类问题的“最后一道防线”。
配置MHA,不是技术选型,而是业务连续性的必要投资。
申请试用&下载资料