MySQL MHA高可用配置实战部署指南
在现代企业数据架构中,数据库的高可用性(High Availability, HA)是保障业务连续性的核心要素。尤其在数据中台、数字孪生和数字可视化等对实时性与稳定性要求极高的场景中,MySQL作为主流关系型数据库,其故障恢复能力直接影响系统可用性。MHA(Master High Availability)是目前业界广泛采用的MySQL主从架构高可用解决方案,具备自动故障检测、主从切换、数据一致性修复等能力,且无需修改应用层代码,部署成本低,运维效率高。
本文将从零开始,系统性地指导您完成MySQL MHA高可用配置的完整实战部署,涵盖环境准备、组件安装、配置优化、故障模拟与验证全流程,确保企业级生产环境稳定运行。
MHA由四个核心组件构成,各司其职,协同工作:
✅ 推荐拓扑:1 Master + 2 Slave + 1 Manager(独立服务器),形成“三节点数据库 + 一管理节点”的高可用架构。
systemctl stop firewalld && systemctl disable firewalldsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config所有节点必须保持时间一致,否则复制延迟判断将失效。
yum install ntpdate -yntpdate pool.ntp.orgchronyd -q 'server pool.ntp.org iburst'systemctl enable chronyd && systemctl start chronydMHA通过SSH远程执行命令,必须在Manager与所有MySQL节点间建立SSH密钥互信。
# 在Manager节点执行ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsafor ip in 192.168.1.10 192.168.1.11 192.168.1.12; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ipdone验证互信:
ssh root@192.168.1.10 "hostname"ssh root@192.168.1.11 "hostname"ssh root@192.168.1.12 "hostname"编辑 /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 = ON重启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 = ON重启MySQL后,执行主从同步:
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确保 Slave_IO_Running: Yes 与 Slave_SQL_Running: Yes 同时为Yes。
⚠️ 注意:若使用GTID模式,确保所有节点的
server_uuid唯一,可通过cat /var/lib/mysql/auto.cnf查看。
在所有节点安装Perl依赖:
yum install epel-release -yyum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y从GitHub下载最新稳定版(推荐0.58):
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.gztar -zxvf mha4mysql-node-0.58.tar.gzcd mha4mysql-node-0.58perl Makefile.PLmake && make install# 在Manager节点安装managercd ../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=rootrepl_user=replrepl_password=ReplPass123!ping_interval=3master_ip_failover_script=/usr/local/bin/master_ip_failovershutdown_script=/usr/local/bin/power_managersecondary_check_script=masterha_secondary_check -s 192.168.1.11 -s 192.168.1.12 --user=root --master_host=192.168.1.10 --master_ip=192.168.1.10[server1]hostname=192.168.1.10master_binlog_dir=/var/lib/mysqlcandidate_master=1check_repl_delay=0[server2]hostname=192.168.1.11master_binlog_dir=/var/lib/mysqlcandidate_master=1check_repl_delay=0[server3]hostname=192.168.1.12master_binlog_dir=/var/lib/mysqlno_master=1✅
candidate_master=1表示该节点优先成为新Master;no_master=1表示该节点不参与竞选。
为支持VIP漂移,需编写 master_ip_failover 脚本(需赋予执行权限):
vim /usr/local/bin/master_ip_failover内容参考官方示例,关键点:在Master宕机后,将虚拟IP(如192.168.1.200)绑定到新的Master节点。
masterha_check_ssh --conf=/etc/mha/app1/app1.cnf输出应显示 OK,无任何ERROR。
masterha_check_repl --conf=/etc/mha/app1/app1.cnf若显示 MySQL Replication Health is 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
在Master节点执行:
kill -9 $(pgrep mysqld)观察Manager日志:
tail -f /var/log/mha/app1/manager.log您将看到如下关键流程:
整个过程通常在10~30秒内完成,业务中断时间极短。
| 优化项 | 建议 |
|---|---|
| 监控告警 | 集成Zabbix或Prometheus,对MHA状态、复制延迟、磁盘IO进行监控 |
| 备份策略 | 每日全备 + binlog增量备份,避免切换后数据丢失 |
| 网络隔离 | 数据库节点部署在独立VLAN,避免广播风暴影响心跳检测 |
| 资源预留 | Manager节点建议配置≥4核8G,避免因资源不足导致误判 |
| 日志归档 | 定期清理 /var/log/mha/app1/ 下的日志文件,防止磁盘占满 |
Can't exec "mysqlbinlog":安装 mysql-community-client 并确保 mysqlbinlog 在PATH中。Failed to get master_ip_failover_script:检查脚本路径是否正确,权限是否为755。Slave_IO_Running: Connecting:检查防火墙、用户权限、GTID一致性。masterha_check_repl 通过,且所有节点时间同步。MHA虽成熟稳定,但存在以下限制:
对于需要更高自动化与云原生支持的场景,建议评估 MySQL InnoDB Cluster 或 MySQL Group Replication。但在传统IDC或混合云环境中,MHA仍是性价比最高的选择。
在数据驱动决策的时代,数据库的稳定性直接决定业务命脉。MHA作为经过十年验证的MySQL高可用方案,以其轻量、高效、零侵入的特性,成为众多企业数据中台的首选。通过本文的完整部署流程,您已掌握从环境搭建、配置优化到故障演练的全套技能。
为保障系统长期稳定运行,建议定期进行故障演练,并结合自动化运维平台实现一键部署与状态巡检。如需进一步提升数据处理能力与可视化分析效率,可申请试用&https://www.dtstack.com/?src=bbs,探索更完整的数据平台解决方案。
再次提醒:高可用不是一次性配置,而是持续运维的艺术。定期更新MHA版本、监控复制延迟、备份关键配置文件,是保障系统健壮性的关键。
申请试用&https://www.dtstack.com/?src=bbs申请试用&https://www.dtstack.com/?src=bbs申请试用&https://www.dtstack.com/?src=bbs
申请试用&下载资料