博客 MySQL MHA高可用配置:集群搭建与故障转移

MySQL MHA高可用配置:集群搭建与故障转移

   数栈君   发表于 2025-11-11 15:03  126  0

MySQL MHA 高可用配置:集群搭建与故障转移

在现代企业中,数据是核心资产,而数据库作为数据存储和管理的核心系统,其高可用性和稳定性至关重要。MySQL 作为全球广泛使用的开源数据库,其高可用性配置一直是企业关注的焦点。MySQL MHA(MySQL High Availability) 是一个基于主从复制的高可用性解决方案,能够实现数据库的自动故障转移和负载均衡,确保业务的连续性。

本文将详细介绍 MySQL MHA 的高可用配置,包括集群搭建和故障转移的实现,帮助企业构建稳定、可靠的数据库系统。


什么是 MySQL MHA?

MySQL MHA 是一个用于 MySQL 高可用性管理的工具,主要通过主从复制(Master-Slave)实现数据库的高可用性。其核心功能包括:

  1. 自动故障转移:当主数据库发生故障时,MHA 能够自动检测并切换到从数据库,确保服务不中断。
  2. 负载均衡:通过读写分离,MHA 可以将写操作集中到主数据库,而读操作分担到从数据库,提升系统性能。
  3. 监控与报警:MHA 提供监控功能,实时检测数据库的健康状态,及时发现潜在问题。

MHA 的优势在于其简单易用性和高效性,特别适合中小型企业或对成本敏感的企业。


MySQL MHA 高可用配置的搭建步骤

1. 环境准备

在搭建 MySQL MHA 集群之前,需要确保以下环境准备完成:

  • 操作系统:建议使用 Linux(如 CentOS、Ubuntu)。
  • 数据库版本:MySQL 5.7 或更高版本。
  • 硬件资源:主从数据库需要足够的 CPU、内存和存储资源。
  • 网络配置:确保主从数据库之间网络通信正常。

2. 安装 MySQL

在搭建 MHA 之前,需要先安装 MySQL 数据库。以下是安装步骤:

(1)安装依赖项

在 CentOS 系统上,运行以下命令安装 MySQL 依赖项:

sudo yum install -y gcc gcc-c++ make cmake libaio libaio-devel perl-DBI perl-DBD-Mysql

(2)下载并编译 MySQL 源码

从 MySQL 官方网站下载源码包并解压:

wget https://dev.mysql.com/get/MySQL-5.7.36.tar.gztar -zxvf MySQL-5.7.36.tar.gzcd MySQL-5.7.36

编译并安装:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_MYSQL_EMBEDDED=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DWITH_DEBUG=0 .makesudo make install

(3)配置 MySQL

创建 MySQL 数据目录并初始化:

sudo mkdir -p /data/mysqlsudo chown -R mysql:mysql /data/mysql

运行初始化脚本:

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

设置 MySQL 环境变量:

echo "export PATH=/usr/local/mysql/bin:$PATH" >> ~/.bashrcsource ~/.bashrc

(4)启动 MySQL 服务

创建 MySQL 服务文件:

sudo nano /etc/systemd/system/mysqld.service

添加以下内容:

[Unit]Description=MySQL Database ServerAfter=network.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --port=3306Restart=always[Install]WantedBy=multi-user.target

启动并启用 MySQL 服务:

sudo systemctl start mysqldsudo systemctl enable mysqld

3. 配置主从复制

在 MySQL MHA 中,主从复制是实现高可用性的基础。以下是配置主从复制的步骤:

(1)配置主数据库

在主数据库上,创建用于复制的用户:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;

修改主数据库的配置文件(my.cnf),添加以下内容:

[mysqld]log_bin=mysql-binserver_id=1

重启 MySQL 服务:

sudo systemctl restart mysqld

(2)配置从数据库

在从数据库上,修改配置文件(my.cnf),添加以下内容:

[mysqld]log_bin=mysql-binserver_id=2relay_log=relay-bin

执行以下命令,将从数据库同步主数据库的数据:

STOP SLAVE;CHANGE MASTER TO MASTER_HOST='主数据库IP', MASTER_USER='repl_user', MASTER_PASSWORD='password';START SLAVE;

检查从数据库的同步状态:

SHOW SLAVE STATUS\G

确保 Slave_IO_RunningSlave_SQL_Running 均为 YES

4. 安装并配置 MHA

(1)安装 MHA

在主从数据库上安装 MHA:

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmsudo yum install -y mha4mysql-node

(2)配置 MHA

在主数据库上创建 MHA 配置文件(/etc/mha/app1.cnf):

[application]description=testcandidate_master=1master_switch_check=1master_binlog=1[server1]hostname=主数据库IPssh_user=mysqlssh_password=密码ping_interval=1master_priority=100[server2]hostname=从数据库IPssh_user=mysqlssh_password=密码ping_interval=1master_priority=90

(3)启动 MHA 代理

启动 MHA 代理服务:

sudo systemctl start mha4mysql-nodesudo systemctl enable mha4mysql-node

5. 测试故障转移

为了验证 MHA 的高可用性,可以进行以下测试:

(1)模拟主数据库故障

在主数据库上执行以下命令,模拟故障:

sudo systemctl stop mysqld

(2)观察 MHA 的自动故障转移

MHA 会自动检测主数据库的故障,并在 app1.cnf 配置的从数据库中选择合适的节点作为新的主数据库。

检查从数据库是否已成为主数据库:

SHOW VARIABLES LIKE 'server_id';

确保从数据库的 server_id 已经变为 1,表示故障转移成功。


MySQL MHA 故障转移的实现

故障转移是 MySQL MHA 的核心功能,以下是其实现原理和步骤:

1. 故障检测

MHA 通过心跳机制(Heartbeat)检测主数据库的状态。如果主数据库在指定时间内没有心跳信号,MHA 将触发故障转移。

2. 故障转移流程

  1. 检测故障:MHA 检测到主数据库不可用。
  2. 选择新主数据库:根据配置文件中的优先级,选择合适的从数据库作为新主数据库。
  3. 切换数据库:MHA 执行切换操作,将从数据库提升为主数据库。
  4. 同步数据:新主数据库需要同步最新的二进制日志到其他从数据库。

3. 手动故障转移

在某些情况下,可能需要手动触发故障转移。以下是手动故障转移的步骤:

(1)停止主数据库服务

sudo systemctl stop mysqld

(2)执行故障转移

运行以下命令,触发 MHA 的故障转移:

sudo /usr/bin/mhaadm --execute --app1_conf=/etc/mha/app1.cnf

(3)验证故障转移

检查新主数据库的状态:

SHOW VARIABLES LIKE 'server_id';

确保新主数据库的 server_id 已经变为 1


MySQL MHA 的监控与维护

为了确保 MySQL MHA 集群的稳定运行,需要进行定期监控和维护:

1. 数据库监控

使用监控工具(如 Prometheus、Grafana)监控 MySQL 的性能指标,包括:

  • CPU 使用率
  • 内存使用率
  • 磁盘 I/O
  • 网络流量

2. 日志分析

定期检查 MySQL 和 MHA 的日志文件,及时发现并解决问题:

  • MySQL 错误日志:/data/mysql/mysql.err
  • MHA 日志:/var/log/mha/

3. 数据备份

定期备份数据库,确保数据的安全性和可恢复性。可以使用 mysqldump 或物理备份工具(如 Percona XtraBackup)。

4. 系统维护

定期更新 MySQL 和 MHA 到最新版本,修复已知的漏洞和性能问题。


总结

MySQL MHA 是一个高效、可靠的高可用性解决方案,能够帮助企业构建稳定的数据库系统。通过主从复制和自动故障转移,MHA 确保了业务的连续性,减少了因数据库故障导致的停机时间。

在实际应用中,企业需要根据自身需求选择合适的配置方案,并进行定期的监控和维护,以确保系统的稳定运行。如果需要进一步了解 MySQL MHA 或其他数据库解决方案,可以申请试用 DTStack 的相关服务,获取专业的技术支持。

申请试用&下载资料
点击袋鼠云官网申请免费试用: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条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

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