MySQL MHA高可用配置是保障核心业务数据库持续在线的关键技术方案,尤其适用于数据中台、数字孪生系统等对数据一致性与服务可用性要求极高的企业级场景。MHA(Master High Availability)是一款开源的MySQL主从高可用管理工具,能够在主库发生故障时自动完成故障转移,将从库提升为新的主库,并同步其他从库,实现分钟级恢复,最大限度减少业务中断时间。
MHA架构由四大核心组件构成,各司其职,协同工作:
✅ 推荐部署拓扑:
Manager(独立服务器) ←监控→ Master(192.168.1.10)←复制→ Slave1(192.168.1.11)←复制→ Slave2(192.168.1.12)VIP:192.168.1.100(绑定至当前主库)
MHA依赖SSH远程执行命令,必须在所有节点间配置SSH密钥互信:
# 在Manager节点生成密钥ssh-keygen -t rsa -P ""# 分发公钥到所有MySQL节点ssh-copy-id root@192.168.1.10ssh-copy-id root@192.168.1.11ssh-copy-id root@192.168.1.12验证互信是否成功:
ssh root@192.168.1.10 "hostname"在主库执行:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';FLUSH PRIVILEGES;在从库配置:
[mysqld]server-id = 11log-bin = mysql-binrelay-log = mysql-relay-binread_only = 1relay_log_purge = 0log_slave_updates = 1binlog_format = ROW启动复制:
CHANGE MASTER TO MASTER_HOST='192.168.1.10', 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。
# 下载并安装MHA Node(以CentOS为例)wget 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# 安装依赖yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y# 安装MHA Managerwget 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在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_ip_failover_script=/usr/local/bin/master_ip_failovershutdown_script=/usr/local/bin/power_managerreport_script=/usr/local/bin/send_report[server1]hostname=192.168.1.10port=3306candidate_master=1check_repl_delay=0[server2]hostname=192.168.1.11port=3306candidate_master=1check_repl_delay=0[server3]hostname=192.168.1.12port=3306no_master=1⚠️ 注意:
candidate_master=1表示该节点优先被选为新主库,no_master=1表示禁止其成为主库(如用于只读分析)。
为实现应用无缝切换,需配置VIP自动漂移脚本:
vim /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 $ssh_user = "root";my $command = shift;if ($command eq "stop") { print "Stopping VIP on old master...\n"; system "ssh $ssh_user\@$orig_master_host $ssh_stop_vip";} elsif ($command eq "start") { print "Starting VIP on new master...\n"; system "ssh $ssh_user\@$new_master_host $ssh_start_vip";}exit 0;赋予执行权限:
chmod +x /usr/local/bin/master_ip_failovermasterha_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 &监控日志:
tail -f /var/log/mha/app1/manager.log在主库执行:
kill -9 $(pgrep mysqld)观察Manager日志,确认是否自动执行:
✅ 成功切换后,原Slave1将变为新主库,VIP自动绑定至其IP,应用层无需重启即可继续写入。
| 实践项 | 说明 |
|---|---|
| 监控告警 | 配置 report_script 调用企业微信、钉钉或邮件通知,确保运维人员第一时间响应 |
| 定期演练 | 每季度执行一次故障切换演练,验证脚本有效性与恢复时间 |
| 备份策略 | MHA不能替代备份,仍需每日全量备份 + binlog增量备份 |
| 网络隔离 | 建议将Manager部署在独立网络段,避免与MySQL节点共用交换机,防止网络抖动误判 |
| 避免脑裂 | 使用 shutdown_script 配合IPMI或电源管理,确保原主库被强制下线 |
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| MHA | 开源免费、轻量、支持VIP漂移、自动选主 | 无内置自动重连、需手动处理部分异常 | 中小型企业、数据中台核心库 |
| Galera Cluster | 多主同步、强一致性 | 写性能下降、网络要求高 | 高一致性要求的金融系统 |
| MySQL InnoDB Cluster | 官方支持、自动分片、可视化 | 需MySQL 8.0+、资源消耗大 | 大型云原生架构 |
| ProxySQL + MHA | 可结合读写分离 | 配置复杂、维护成本高 | 高并发读写分离场景 |
在数据中台与数字孪生系统中,MHA因其低侵入性、高可靠性与低成本,成为多数企业的首选方案。
→ 检查 SHOW SLAVE STATUS 中的 Master_Host 是否指向新主库;若未自动更新,手动执行 CHANGE MASTER TO。
→ 检查MySQL是否监听0.0.0.0,而非127.0.0.1;确认防火墙开放3306端口。
→ 确保脚本中 eth0 网卡名称正确;使用 ip addr show 查看真实接口名。
→ 确保应用连接池已重启,或使用DNS域名绑定VIP,避免硬编码IP。
在构建稳定的数据中台时,数据库的可用性直接决定业务连续性。MHA以其轻量、高效、可定制的特性,在不改变现有MySQL架构的前提下,提供了企业级的高可用保障。它不需要昂贵的商业授权,也不依赖复杂的集群中间件,是中小规模数字孪生系统最务实的选择。
如果您正在评估数据库高可用方案,或希望快速部署一套生产级MySQL集群,不妨从MHA开始。我们提供专业架构咨询与部署支持,助您降低运维风险,提升系统韧性。申请试用&https://www.dtstack.com/?src=bbs
对于正在规划数据平台演进的企业,MHA不仅是技术选型,更是业务连续性的基石。申请试用&https://www.dtstack.com/?src=bbs
申请试用&下载资料无论您是数据工程师、架构师还是运维负责人,掌握MHA高可用配置,意味着您能为系统注入更强的稳定性与容错能力。立即行动,提升系统韧性:申请试用&https://www.dtstack.com/?src=bbs