MySQL MHA高可用配置是企业级数据库架构中保障核心业务连续性的关键技术方案。在数据中台、数字孪生和数字可视化系统中,MySQL作为主流的关系型数据库,其稳定性直接决定上层应用的可用性。当主库发生宕机时,若无自动故障转移机制,将导致业务中断、数据写入停滞、报表延迟等严重后果。MHA(Master High Availability)通过自动化主从切换、数据一致性校验与故障恢复,显著提升MySQL集群的健壮性。本文将系统性解析MySQL MHA高可用配置的完整实施流程,涵盖架构设计、节点部署、配置优化与验证方法,适用于中大型企业生产环境部署。
MHA由四个核心组件构成,各司其职,协同实现高可用:
✅ 推荐部署拓扑:1台Manager(独立物理机或虚拟机)1台Master(生产写入)2台Slave(一主一备,开启半同步复制)所有节点需部署在同局域网内,网络延迟 ≤ 5ms
# 关闭SELinuxsetenforce 0sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld所有节点必须使用NTP同步时间,避免复制延迟误判:
yum install ntpdate -yntpdate pool.ntp.orgsystemctl enable ntpdsystemctl start ntpd配置主机名(示例):
| 节点角色 | 主机名 | IP地址 |
|---|---|---|
| Manager | mha-manager | 192.168.1.10 |
| Master | mysql-master | 192.168.1.11 |
| Slave1 | mysql-slave1 | 192.168.1.12 |
| Slave2 | mysql-slave2 | 192.168.1.13 |
确保 /etc/hosts 文件中各节点互解析:
192.168.1.10 mha-manager192.168.1.11 mysql-master192.168.1.12 mysql-slave1192.168.1.13 mysql-slave2编辑 /etc/my.cnf:
[mysqld]server-id = 1log-bin = mysql-binbinlog_format = ROWrelay-log = mysql-relay-binlog-slave-updates = 1read-only = 0gtid_mode = ONenforce_gtid_consistency = ONbinlog_checksum = NONE重启MySQL服务:
systemctl restart mysqld创建复制用户:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';FLUSH PRIVILEGES;编辑 /etc/my.cnf:
[mysqld]server-id = 2 # slave1# server-id = 3 # slave2log-bin = mysql-binbinlog_format = ROWrelay-log = mysql-relay-binlog-slave-updates = 1read-only = 1gtid_mode = ONenforce_gtid_consistency = ONbinlog_checksum = NONE重启MySQL后,执行主从同步:
CHANGE MASTER TO MASTER_HOST='192.168.1.11', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', MASTER_AUTO_POSITION=1;START SLAVE;SHOW SLAVE STATUS\G验证 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。
💡 建议开启半同步复制以增强数据一致性:在主库执行:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';在从库执行:INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';启用:SET GLOBAL rpl_semi_sync_master_enabled = 1;
所有节点安装Perl依赖:
yum install epel-release -yyum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y下载MHA Manager与Node包(官方GitHub或阿里云镜像):
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gzwget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz解压并安装Node包(所有MySQL节点):
tar zxvf mha4mysql-node-0.58.tar.gzcd mha4mysql-node-0.58perl Makefile.PLmake && make install安装Manager包(仅Manager节点):
tar 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=3master_binlog_dir=/var/lib/mysqlmaster_ip_failover_script=/usr/local/bin/master_ip_failovershutdown_script=/usr/local/bin/poweroff_sshreport_script=/usr/local/bin/send_report[server1]hostname=192.168.1.11candidate_master=1check_repl_delay=0[server2]hostname=192.168.1.12candidate_master=1check_repl_delay=0[server3]hostname=192.168.1.13no_master=1⚠️ 注意:
candidate_master=1表示该节点优先成为新主库,no_master=1表示禁止其成为主库(如用于只读分析)。
在Manager节点生成密钥并分发至所有MySQL节点:
ssh-keygen -t rsa -P ''ssh-copy-id root@192.168.1.11ssh-copy-id root@192.168.1.12ssh-copy-id root@192.168.1.13测试连接:
ssh 192.168.1.11ssh 192.168.1.12ssh 192.168.1.13masterha_check_repl --conf=/etc/mha/app1/app1.cnf输出应显示:
MySQL Replication Health is OK.masterha_check_ssh --conf=/etc/mha/app1/app1.cnf全部节点显示 OK 才可继续。
nohup masterha_manager --conf=/etc/mha/app1/app1.cnf --ignore_last_failover &查看状态:
masterha_check_status --conf=/etc/mha/app1/app1.cnf正常输出:app1 (pid:1234) is running(0:PING_OK), master:192.168.1.11
在Master节点执行:
systemctl stop mysqld观察Manager日志:
tail -f /var/log/mha/app1/manager.log应看到如下关键日志:
Fri Apr 12 10:20:30 2024 - [info] Master is down!Fri Apr 12 10:20:35 2024 - [info] New master is 192.168.1.12Fri Apr 12 10:20:40 2024 - [info] Switching master to 192.168.1.12 completed.10秒内完成切换,业务写入自动恢复至新主库。
✅ 重要:切换后需手动修复原主库,重新加入集群作为从库,避免数据不一致。
| 优化项 | 建议 |
|---|---|
| 网络隔离 | MHA Manager与MySQL节点部署在同一VLAN,避免跨网段延迟 |
| 心跳检测 | 将 ping_interval 从默认5秒调整为3秒,提升故障感知速度 |
| 日志归档 | 使用logrotate定期清理 /var/log/mha/ 下的日志文件 |
| 报警机制 | 集成邮件/钉钉/企业微信通知,通过 report_script 调用Webhook |
| 备份策略 | 每日全量备份 + binlog增量备份,避免切换后数据丢失 |
在数字孪生系统中,实时数据写入依赖数据库的持续可用。MHA的自动故障转移能力,使系统在主库宕机时仍能维持99.9%以上的服务可用性。对于可视化平台而言,这意味着仪表盘不会因数据库中断而“空白”,数据看板持续刷新,决策支持不中断。
企业级数据中台的核心是“稳”,而MHA正是实现“稳”的关键一环。申请试用&https://www.dtstack.com/?src=bbs通过MHA构建的高可用MySQL集群,可无缝对接实时分析引擎与BI工具,为数据驱动决策提供坚实底座。申请试用&https://www.dtstack.com/?src=bbs若您正在规划下一代数据架构,建议将MHA纳入标准部署模板,降低运维风险,提升系统韧性。申请试用&https://www.dtstack.com/?src=bbs
check_repl 和 check_ssh 双重检测。 MHA虽为开源方案,但其稳定性和社区支持已通过大量生产环境验证。在不引入商业中间件的前提下,它是构建高可用MySQL集群最具性价比的选择。部署完成后,建议定期进行故障演练,确保团队熟悉切换流程,真正实现“无人值守”的高可用运维体系。
申请试用&下载资料