MySQL MHA高可用配置是企业级数据库架构中保障核心业务连续性的关键技术方案。在数据中台、数字孪生和数字可视化系统中,MySQL作为主流的关系型数据库,其稳定性直接决定数据服务的可用性。一旦主库宕机,若无自动故障转移机制,将导致报表延迟、实时分析中断、可视化大屏数据断层,进而影响决策效率。MHA(Master High Availability)通过自动化主从切换、数据一致性校验与故障恢复,实现99.99%以上的可用性目标,是构建可靠数据基础设施的首选方案。
MHA由四个核心组件构成,协同完成高可用控制:
✅ 推荐部署拓扑:3节点MySQL集群(1主2从) + 1独立MHA Manager节点(建议部署于第三方服务器,避免单点)
MHA Manager通过SSH连接各节点,周期性发送心跳包(默认3秒),若连续三次未收到响应,则判定主库失效,启动自动切换流程。
# 关闭SELinux(CentOS)sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config# 关闭防火墙sudo systemctl stop firewalldsudo systemctl disable firewalldMHA依赖SSH进行远程命令执行,必须在所有节点间建立无密码登录:
# 在MHA Manager节点生成密钥ssh-keygen -t rsa -b 2048# 分发公钥到所有MySQL节点(包括自身)ssh-copy-id root@192.168.1.10 # 主库ssh-copy-id root@192.168.1.11 # 从库1ssh-copy-id root@192.168.1.12 # 从库2验证连接:
ssh root@192.168.1.10 "hostname"若返回主机名,则配置成功。
在主库执行:
-- 创建复制用户CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';FLUSH PRIVILEGES;-- 开启二进制日志(my.cnf)[mysqld]server-id=1log-bin=mysql-binbinlog-format=ROWsync_binlog=1innodb_flush_log_at_trx_commit=1重启MySQL后,获取主库状态:
SHOW MASTER STATUS;-- 记录File和Position字段在从库执行:
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', 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。
所有节点安装Perl依赖与MHA组件:
# 安装EPEL源(CentOS)sudo yum install epel-release -y# 安装依赖sudo yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y# 下载MHA Node与Manager(推荐0.58版本)wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpmwget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm# 安装sudo rpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpmsudo rpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm在MHA Manager节点创建配置目录与文件:
mkdir -p /etc/mha/app1vim /etc/mha/app1/app1.cnf配置内容如下:
[server default]user=mha_userpassword=MHAPass123!ssh_user=rootrepl_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/power_managersecondary_check_script=ssh -f -p 22 -l root --master_ip=192.168.1.10 -q -x "ping -c 1 192.168.1.10"[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表示禁止其成为主库(如仅用于只读分析)。
为实现应用无感知切换,建议配置虚拟IP(VIP)漂移。创建 /usr/local/bin/master_ip_failover:
#!/usr/bin/env perluse strict;use warnings FATAL => 'all';use Getopt::Long;my $vip = '192.168.1.200/24';my $key = '1';my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";my $command = $ARGV[0];if ($command eq "stop") { system("ssh root@192.168.1.10 '$ssh_stop_vip'");} elsif ($command eq "start") { system("ssh root@192.168.1.11 '$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,则表示环境准备就绪。
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.10
在主库执行:
sudo systemctl stop mysqld观察MHA Manager日志:
tail -f /var/log/mha/app1/manager.log应看到如下关键信息:
Master is down!New master selected: 192.168.1.11Applying differential binary logs...VIP moved to 192.168.1.115~15秒内,从库自动提升为主库,应用连接可无缝切换至新主库(需配合DNS或负载均衡器)。
masterha_check_status 返回非 PING_OK 时触发告警masterha_check_repl 作为健康巡检sync_binlog=1 和 innodb_flush_log_at_trx_commit=1pt-table-checksum 校验主从数据一致性| 特性 | MHA | MySQL Group Replication | Galera Cluster |
|---|---|---|---|
| 部署复杂度 | 中等 | 高 | 高 |
| 自动故障切换 | ✅ 支持 | ✅ 支持 | ✅ 支持 |
| 多主写入 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| 网络容错 | 依赖SSH | 依赖Paxos协议 | 依赖组通信 |
| 适用场景 | 中小型企业、传统架构 | 大型金融系统 | 高并发写入场景 |
MHA虽不支持多主,但其轻量、稳定、兼容性好,尤其适合已有主从架构的企业平滑升级。对于需要多写节点的场景,可考虑[申请试用&https://www.dtstack.com/?src=bbs] 的分布式数据库方案。
建议将MHA管理封装为脚本,提升运维效率:
#!/bin/bash# mha-control.shcase $1 in start) nohup masterha_manager --conf=/etc/mha/app1/app1.cnf --ignore_last_failover & echo "MHA Manager started." ;; stop) masterha_stop --conf=/etc/mha/app1/app1.cnf echo "MHA Manager stopped." ;; status) masterha_check_status --conf=/etc/mha/app1/app1.cnf ;; check) masterha_check_ssh --conf=/etc/mha/app1/app1.cnf masterha_check_repl --conf=/etc/mha/app1/app1.cnf ;;esac赋予执行权限后,运维人员仅需执行 ./mha-control.sh status 即可掌握集群状态。
在数据中台、数字孪生与可视化系统中,任何一次数据库中断都可能造成业务数据断层与决策失误。MHA高可用配置虽非最新技术,但其成熟、可控、低成本的特性,使其成为中小规模企业构建稳定数据服务的首选方案。通过合理部署、定期演练与监控集成,可将数据库故障恢复时间从数小时压缩至10秒以内。
为应对未来数据规模增长与高并发需求,建议在MHA基础上,逐步引入读写分离、分库分表与云原生数据库方案。当前阶段,[申请试用&https://www.dtstack.com/?src=bbs] 可为您提供更高级的分布式数据管理能力,实现从高可用到智能运维的跃迁。
如需长期稳定运行,建议每季度执行一次故障切换演练,并将MHA配置纳入配置管理工具(如Ansible)进行版本控制。数据是企业的核心资产,而高可用是守护它的第一道防线。[申请试用&https://www.dtstack.com/?src=bbs],让您的数据服务不止于可用,更趋于智能与弹性。
申请试用&下载资料