MySQL MHA高可用配置是企业级数据库架构中保障业务连续性的核心手段之一。在数据中台、数字孪生和数字可视化系统中,MySQL 作为主流的关系型数据库,其稳定性直接决定上层应用的可用性。一旦主库宕机,若无自动故障转移机制,将导致数据写入中断、报表延迟、实时看板失效,进而影响决策效率与业务运营。MHA(Master High Availability)正是为解决这一痛点而生的开源高可用解决方案,它能在主库故障时实现秒级自动切换,最大限度减少服务中断时间。
MHA由两大部分组成:MHA Manager 和 MHA Node。
MHA的核心优势在于基于二进制日志(binlog)的精准数据同步。当主库崩溃,MHA会从所有从库中选出拥有最新binlog的节点作为新主库,并自动将其他从库指向新主库,确保数据零丢失(在合理配置下)。
✅ 关键点:MHA不依赖共享存储,不使用VIP漂移,而是通过SQL层面的复制协议实现切换,兼容性高,适用于云环境和物理机混合部署。
为确保MHA稳定运行,建议采用以下拓扑结构:
| 节点角色 | IP地址 | 操作系统 | MySQL版本 | 说明 |
|---|---|---|---|---|
| Master | 192.168.1.10 | CentOS 7.9 | 5.7.44 | 主库,写入入口 |
| Slave1 | 192.168.1.11 | CentOS 7.9 | 5.7.44 | 从库1,异步复制 |
| Slave2 | 192.168.1.12 | CentOS 7.9 | 5.7.44 | 从库2,异步复制 |
| Manager | 192.168.1.20 | CentOS 7.9 | 无MySQL | 仅部署MHA Manager |
⚠️ 所有节点必须关闭防火墙或开放SSH(22)、MySQL(3306)端口;建议启用NTP时间同步,避免因时间偏差导致复制异常。
编辑 /etc/my.cnf:
[mysqld]server-id = 10log-bin = mysql-binbinlog_format = ROWsync_binlog = 1innodb_flush_log_at_trx_commit = 1relay-log-purge = 0gtid_mode = OFFenforce_gtid_consistency = OFF重启MySQL服务:
systemctl restart mysqld创建复制用户:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';FLUSH PRIVILEGES;记录主库状态:
SHOW MASTER STATUS;-- 记录 File 和 Position,用于从库配置编辑 /etc/my.cnf:
[mysqld]server-id = 11 # Slave1 使用11,Slave2 使用12log-bin = mysql-binrelay-log = mysql-relay-binread_only = 1relay-log-purge = 0重启MySQL:
systemctl restart mysqld配置主从同步:
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234;START SLAVE;SHOW SLAVE STATUS\G确保 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 同时为 Yes。
在所有节点(包括Manager)安装EPEL源和必要工具:
yum install epel-release -yyum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -ywget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gztar -zxvf mha4mysql-node-0.58.tar.gzcd mha4mysql-node-0.58perl Makefile.PLmake && make installwget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gztar -zxvf mha4mysql-manager-0.58.tar.gzcd mha4mysql-manager-0.58perl Makefile.PLmake && make install在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=rootssh_port=22repl_user=replrepl_password=ReplPass123!ping_interval=2master_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表示优先选为新主库;check_repl_delay=0避免因延迟过大拒绝切换。
在Manager节点生成密钥并分发到所有MySQL节点:
ssh-keygen -t rsassh-copy-id root@192.168.1.10ssh-copy-id root@192.168.1.11ssh-copy-id root@192.168.1.12测试连接:
masterha_check_ssh --conf=/etc/mha/app1/app1.cnf若输出 OK,则SSH配置成功。
masterha_check_repl --conf=/etc/mha/app1/app1.cnf正常输出应包含:
MySQL Replication Health is OK.Slave_IO_Running 和 Slave_SQL_Running 均为 Yes在主库(192.168.1.10)执行:
pkill mysqld观察Manager节点日志:
tail -f /var/log/mha/app1/manager.log您将看到:
整个过程通常在 10~30秒内完成,远优于人工干预。
| 优化项 | 说明 |
|---|---|
| 启用半同步复制 | 在主库和至少一个从库启用 rpl_semi_sync_master_enabled=1,降低数据丢失风险 |
| 设置监控告警 | 集成Zabbix或Prometheus,监控MHA状态和MySQL复制延迟 |
| 定期演练切换 | 每季度模拟一次故障切换,验证脚本有效性 |
| 备份配置文件 | 将 /etc/mha/app1/app1.cnf 和 master_ip_failover 脚本纳入版本控制 |
| 限制管理权限 | MHA使用的MySQL用户仅授予复制和RELOAD权限,避免权限过大 |
切换完成后,原主库需手动重建为从库:
no_master=1💡 重要提醒:MHA不自动修复原主库,必须人工介入,避免脑裂。
| 方案 | 自动切换 | 数据零丢失 | 部署复杂度 | 适用场景 |
|---|---|---|---|---|
| MHA | ✅ 是 | ✅ 是(配置得当) | 中等 | 中大型企业,MySQL 5.7及以下 |
| Galera Cluster | ✅ 是 | ✅ 是 | 高 | 高并发写入,需多主 |
| MySQL InnoDB Cluster | ✅ 是 | ✅ 是 | 高 | MySQL 8.0+,官方推荐 |
| Keepalived + VIP | ✅ 是 | ❌ 否(可能丢数据) | 低 | 简单场景,非生产核心 |
📌 结论:对于尚未升级至MySQL 8.0的企业,MHA仍是性价比最高的高可用方案。
为应对未来架构演进,建议在现有MHA基础上,逐步规划向 MySQL InnoDB Cluster 迁移路径,同时保持MHA作为过渡期保障。
在数据中台、数字孪生和可视化系统中,数据库的可用性不是“可选项”,而是“生命线”。MHA高可用配置提供了一套轻量、高效、低成本的解决方案,尤其适合预算有限但对稳定性要求极高的企业。它不需要昂贵的商业许可,也不依赖复杂硬件,仅通过标准化的MySQL复制机制,即可实现生产级容灾能力。
若您正在评估数据库高可用方案,或希望提升现有系统的容错能力,申请试用&https://www.dtstack.com/?src=bbs 可为您提供更全面的数据平台架构咨询与部署支持。无论您是运维工程师还是数据架构师,MHA都是值得深入掌握的核心技能。
申请试用&https://www.dtstack.com/?src=bbs申请试用&https://www.dtstack.com/?src=bbs
在数字化转型的浪潮中,每一次数据库的稳定运行,都是业务连续性的基石。不要等到故障发生才想起高可用——今天配置MHA,明天安心看数据。
申请试用&下载资料