MySQL MHA高可用配置是企业级数据库架构中保障核心业务连续性的关键技术方案。在数据中台、数字孪生和数字可视化系统中,MySQL作为主流的关系型数据库,其稳定性直接决定上层应用的可用性。当单点故障发生时,若无自动故障转移机制,系统将面临数分钟至数小时的服务中断,严重影响数据分析、实时监控和决策支持能力。MHA(Master High Availability)正是为解决这一痛点而设计的开源高可用解决方案,它能在主库宕机时,自动完成故障检测、数据一致性校验、从库切换与应用重定向,实现秒级恢复。
MHA由四个核心组件构成,协同完成高可用闭环:
MHA Manager(管理节点)作为控制中枢,部署于独立服务器(建议与数据库节点物理隔离),负责监控主库健康状态、触发故障切换、协调日志同步与VIP漂移。它不参与数据读写,仅通过SSH连接各节点执行命令,资源占用极低。
MHA Node(代理节点)部署在每台MySQL实例服务器上,接收Manager指令,执行二进制日志(binlog)提取、中继日志(relay log)应用、数据差异补偿等底层操作。它轻量、无状态,仅在故障时被激活。
MySQL主从集群至少包含一台主库(Master)与两台从库(Slave),推荐采用一主两从架构。从库需开启log_slave_updates,确保中继日志可被其他从库继续复制,为后续切换提供完整数据链。
VIP(虚拟IP)与DNS动态解析通过master_ip_failover脚本绑定浮动IP,实现应用层无感知切换。应用连接字符串始终指向VIP,而非物理IP,确保切换后无需修改代码或配置。
📌 关键建议:MHA Manager不应部署在任何MySQL节点上,避免“共毁效应”。推荐使用独立的Linux服务器(如CentOS 7/8或Rocky Linux),配置SSH密钥认证,禁用密码登录。
| 节点类型 | IP地址 | 角色 | 操作系统 |
|---|---|---|---|
| Master | 192.168.1.10 | 主库 | CentOS 8 |
| Slave1 | 192.168.1.11 | 从库1 | CentOS 8 |
| Slave2 | 192.168.1.12 | 从库2 | CentOS 8 |
| Manager | 192.168.1.20 | 管理节点 | CentOS 8 |
chrony或ntp必须配置,时间偏差超过1秒将导致复制异常。# 在Manager节点生成密钥对ssh-keygen -t rsa -b 2048# 分发公钥到各数据库节点ssh-copy-id root@192.168.1.10ssh-copy-id root@192.168.1.11ssh-copy-id root@192.168.1.12在Master上创建复制账户:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';FLUSH PRIVILEGES;配置Master的my.cnf:
[mysqld]server-id = 10log-bin = mysql-binbinlog_format = ROWsync_binlog = 1innodb_flush_log_at_trx_commit = 1gtid_mode = ONenforce_gtid_consistency = ON在Slave上配置:
[mysqld]server-id = 11 # Slave1relay_log = mysql-relay-binlog_slave_updates = 1read_only = 1gtid_mode = ONenforce_gtid_consistency = ON执行主从同步:
-- 在Slave上执行CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', MASTER_AUTO_POSITION=1;START SLAVE;SHOW SLAVE STATUS\G验证:Seconds_Behind_Master为0,Slave_IO_Running与Slave_SQL_Running均为Yes。
在Manager节点安装:
# 安装EPEL源yum install epel-release -y# 安装MHA Node(所有MySQL节点)yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager# 安装MHA Managerwget 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# 安装MHA Node(所有MySQL节点)wget 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 install创建配置目录与文件:
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=ReplPass123!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=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跳过延迟检查,适用于低延迟环境。
创建/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_stop_vip);} elsif ($command eq "start") { system($ssh_start_vip);}exit 0;赋予执行权限:
chmod +x /usr/local/bin/master_ip_failover执行健康检查:
masterha_check_ssh --conf=/etc/mha/app1/app1.cnfmasterha_check_repl --conf=/etc/mha/app1/app1.cnf输出应显示“OK”无错误。若出现SSH或复制异常,需逐项排查。
启动MHA监控:
nohup masterha_manager --conf=/etc/mha/app1/app1.cnf --ignore_last_failover &验证日志:
tail -f /var/log/mha/app1/manager.log模拟主库宕机:
# 在Master节点执行systemctl stop mysqld观察Manager日志,应出现:
整个过程通常在10~30秒内完成,远优于人工干预的数分钟。
尽管MySQL 8.0原生支持Group Replication与InnoDB Cluster,但MHA在以下场景更具优势:
对于数据中台、BI报表系统、实时数据看板等对稳定性要求极高的场景,MHA是经过生产验证的“稳”之选。
在复杂数据架构中,MHA仅解决数据库层高可用。若需实现端到端的可观测性、自动化运维与智能调度,建议结合企业级数据平台能力。[申请试用&https://www.dtstack.com/?src=bbs] 提供完整的数据治理、任务编排与异常自愈能力,可与MHA无缝集成,构建“数据库+平台”双保险体系。
masterha_check_repl健康检查。/etc/mha/app1/app1.cnf与切换脚本。masterha_stop --conf=/etc/mha/app1/app1.cnfFLUSH TABLES WITH READ LOCK,可能导致MHA误判。| 维度 | 传统方案 | MHA方案 |
|---|---|---|
| 故障恢复时间 | 5~30分钟 | 10~30秒 |
| 自动化程度 | 手动切换 | 全自动 |
| 数据一致性 | 易丢失 | GTID保障 |
| 运维复杂度 | 高 | 中(配置一次,长期稳定) |
| 成本 | 低(无软件) | 0元开源 |
MHA不是万能药,但它是当前在MySQL生态中,性价比最高、落地最成熟的高可用方案。对于追求系统稳定、数据零丢失、服务不间断的企业用户,掌握MHA高可用配置,是构建可靠数据基础设施的必经之路。
[申请试用&https://www.dtstack.com/?src=bbs] —— 让您的数据库高可用体系,不止于“能用”,更做到“智能、可管、可控”。
[申请试用&https://www.dtstack.com/?src=bbs] —— 从单点故障到全链路韧性,每一步都值得专业支撑。
申请试用&下载资料