如何在生产环境部署MySQL高可用MHA集群架构

来源:站长联盟作者:小白龙头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在生产环境部署MySQL高可用MHA集群架构》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在生产环境部署MySQL高可用MHA集群架构》有用,将其分享出去将是对创作者最好的鼓励。

生产环境中MySQL数据库的高可用是保障业务稳定运行的核心需求,MHA作为成熟的开源高可用解决方案,能够在不影响业务的前提下实现主库故障自动切换。

如何在生产环境部署MySQL高可用MHA集群架构

MHA集群核心组件介绍

MHA全称Master High Availability,由日本DeNA公司开发,主要包含两个核心组件,分别是管理节点(Manager)和数据节点(Node)。

  • Manager节点:负责整个集群的管理工作,包括主库状态监控、故障检测、自动切换决策、切换后从库同步关系调整等,通常部署在独立的服务器上,也可以和其他从库部署在同一台机器。
  • Node节点:部署在每一台MySQL服务器上,负责执行Manager下发的指令,比如主库宕机后保存二进制日志、应用差异中继日志、切换主从关系等。

部署前置条件准备

在正式部署MHA集群前,需要完成以下基础准备工作:

  • 准备至少3台服务器,1台作为主库,2台作为从库,另外可以单独准备1台作为Manager节点,所有服务器之间网络互通。
  • 所有MySQL实例版本保持一致,建议5.7及以上版本,开启二进制日志,设置server_id且每台实例的server_id唯一。
  • 所有服务器之间配置SSH免密登录,Manager节点需要能够免密登录所有MySQL节点,所有MySQL节点之间也需要互相免密登录。
  • 所有从库开启中继日志,并且设置read_only参数,避免从库被误写入数据。

MySQL主从复制配置示例

首先完成主从复制的基础配置,主库配置文件添加如下内容:

[mysqld]
server_id=1
log_bin=mysql-bin
binlog_format=row
expire_logs_days=7

从库配置文件添加如下内容:

[mysqld]
server_id=2
log_bin=mysql-bin
relay_log=relay-bin
read_only=1

主库创建用于主从复制的账号:

CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%';
FLUSH PRIVILEGES;

从库执行主从同步命令:

CHANGE MASTER TO
MASTER_HOST='192.168.0.10',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;

MHA软件安装

所有节点都需要安装MHA Node,Manager节点额外安装MHA Manager,安装前需要先安装依赖包。

依赖包安装

CentOS系统下执行以下命令安装依赖:

yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-MakeMaker

Node节点安装

下载MHA Node安装包后执行安装:

tar -zxvf mha4mysql-node-0.58.tar.gz
cd mha4mysql-node-0.58
perl Makefile.PL
make && make install

Manager节点安装

Manager节点需要先安装Node,再安装Manager:

tar -zxvf mha4mysql-manager-0.58.tar.gz
cd mha4mysql-manager-0.58
perl Makefile.PL
make && make install

MHA配置文件编写

Manager节点需要创建MHA的配置文件,通常放在/etc/masterha/目录下,示例配置如下:

[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/var/lib/mysql
user=root
password=root_password
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=repl_password
ssh_user=root

[server1]
hostname=192.168.0.10
port=3306
master_binlog_dir=/var/lib/mysql

[server2]
hostname=192.168.0.11
port=3306
candidate_master=1

[server3]
hostname=192.168.0.12
port=3306
no_master=1

配置说明:candidate_master=1表示该节点有资格成为新的主库,no_master=1表示该节点永远不会成为主库。

MHA集群检查与启动

配置完成后需要先检查SSH连通性和主从复制状态。

SSH连通性检查

masterha_check_ssh --conf=/etc/masterha/app1.cnf

如果输出所有节点SSH检查通过,说明免密配置正常。

主从复制状态检查

masterha_check_repl --conf=/etc/masterha/app1.cnf

检查通过后输出MySQL Replication Health is OK,说明主从复制状态正常。

启动MHA Manager

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

启动后可以通过masterha_check_status --conf=/etc/masterha/app1.cnf查看集群运行状态。

故障切换验证

可以手动停止主库的MySQL服务,模拟主库故障,观察MHA的切换过程。

systemctl stop mysqld

查看Manager节点的日志,可以看到MHA检测到主库故障后,自动选举了新的主库,并且将其他从库的主库指向切换到了新主库,整个切换过程通常在几十秒内完成,业务侧只需要重新建立数据库连接即可恢复服务。

注意事项

  • 切换完成后需要及时修复故障的原主库,将其作为从库加入集群,并且更新MHA配置文件。
  • 生产环境中建议将MHA Manager也做高可用,避免Manager节点单点故障。
  • 定期检查MHA的运行日志,及时发现潜在问题。
  • 如果业务写入量较大,需要评估切换过程中可能的二进制日志丢失风险,必要时可以结合半同步复制使用。

MySQL高可用MHA集群架构修改时间:2026-07-08 18:42:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。