博客 MySQL MHA高可用集群配置实战

MySQL MHA高可用集群配置实战

   数栈君   发表于 2026-03-29 17:03  54  0

MySQL MHA高可用配置是企业级数据库架构中保障核心业务连续性的关键技术方案。在数据中台、数字孪生和数字可视化系统中,MySQL作为主流的关系型数据库,其稳定性直接决定数据服务的可用性。一旦主库宕机,若无自动故障转移机制,将导致报表延迟、实时分析中断、可视化大屏数据断层,进而影响决策效率。MHA(Master High Availability)通过自动化主从切换、数据一致性校验与故障恢复,实现99.99%以上的可用性目标,是构建可靠数据基础设施的首选方案。


一、MHA架构核心组件解析

MHA由四个核心组件构成,协同完成高可用控制:

  • MHA Manager:部署于独立监控节点,负责检测主库状态、触发故障转移、协调从库同步。它不参与数据读写,仅作为“大脑”运行。
  • MHA Node:部署在每台MySQL服务器(主库与从库)上,负责执行日志提取、中继日志应用、数据差异修复等底层操作。
  • Master Server:当前的写入主库,所有应用连接均指向此节点。
  • Slave Servers:至少部署两台从库,用于数据冗余与读负载分担,其中一台被选为“候选主库”。

✅ 推荐部署拓扑:3节点MySQL集群(1主2从) + 1独立MHA Manager节点(建议部署于第三方服务器,避免单点)

MHA Manager通过SSH连接各节点,周期性发送心跳包(默认3秒),若连续三次未收到响应,则判定主库失效,启动自动切换流程。


二、环境准备与系统配置

1. 操作系统与MySQL版本要求

  • 操作系统:CentOS 7.9 / Ubuntu 20.04 LTS(推荐稳定长期支持版本)
  • MySQL版本:5.7.x 或 8.0.x(不建议使用5.6,因缺乏GTID支持)
  • 所有节点需关闭防火墙或开放端口:22(SSH)、3306(MySQL)、9090(MHA监控端口,可选)
# 关闭SELinux(CentOS)sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config# 关闭防火墙sudo systemctl stop firewalldsudo systemctl disable firewalld

2. SSH无密码互信配置

MHA依赖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"

若返回主机名,则配置成功。

3. MySQL主从复制配置

在主库执行:

-- 创建复制用户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: YesSlave_SQL_Running: Yes 同时为Yes。


三、MHA软件安装与配置

1. 安装依赖包

所有节点安装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

2. 创建MHA配置文件

在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 表示禁止其成为主库(如仅用于只读分析)。

3. 创建VIP漂移脚本(可选但推荐)

为实现应用无感知切换,建议配置虚拟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_failover

四、健康检查与故障模拟测试

1. 检查SSH与复制状态

masterha_check_ssh --conf=/etc/mha/app1/app1.cnfmasterha_check_repl --conf=/etc/mha/app1/app1.cnf

输出中若显示 OK,则表示环境准备就绪。

2. 启动MHA Manager

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

3. 模拟主库宕机

在主库执行:

sudo systemctl stop mysqld

观察MHA Manager日志:

tail -f /var/log/mha/app1/manager.log

应看到如下关键信息:

  • Master is down!
  • New master selected: 192.168.1.11
  • Applying differential binary logs...
  • VIP moved to 192.168.1.11

5~15秒内,从库自动提升为主库,应用连接可无缝切换至新主库(需配合DNS或负载均衡器)。


五、生产环境优化建议

1. 应用层连接优化

  • 使用连接池(如HikariCP、Druid)并设置自动重连机制
  • 在应用配置中使用域名而非IP,域名解析指向VIP
  • 配置读写分离中间件(如ProxySQL)实现自动路由

2. 监控与告警集成

  • 将MHA日志接入ELK或Prometheus+Alertmanager
  • 设置邮件/钉钉告警:当 masterha_check_status 返回非 PING_OK 时触发告警
  • 每日执行 masterha_check_repl 作为健康巡检

3. 数据一致性保障

  • 启用 sync_binlog=1innodb_flush_log_at_trx_commit=1
  • 避免在主库执行大事务,防止复制延迟
  • 定期使用 pt-table-checksum 校验主从数据一致性

六、MHA的局限性与替代方案对比

特性MHAMySQL Group ReplicationGalera 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],让您的数据服务不止于可用,更趋于智能与弹性。

申请试用&下载资料
点击袋鼠云官网申请免费试用:https://www.dtstack.com/?src=bbs
点击袋鼠云资料中心免费下载干货资料:https://www.dtstack.com/resources/?src=bbs
《数据资产管理白皮书》下载地址:https://www.dtstack.com/resources/1073/?src=bbs
《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=bbs
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=bbs
《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=bbs

免责声明
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,袋鼠云不对内容的真实、准确或完整作任何形式的承诺。如有其他问题,您可以通过联系400-002-1024进行反馈,袋鼠云收到您的反馈后将及时答复和处理。
0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料