在现代企业中,数据中台、数字孪生和数字可视化等技术的应用越来越广泛,而这些技术的核心都离不开一个稳定、高效、高可用的数据库系统。MySQL 作为全球最受欢迎的开源数据库之一,其高可用集群的搭建和故障转移配置是确保业务连续性的重要环节。本文将详细介绍 MySQL MHA(Master High Availability)高可用集群的搭建过程,并深入探讨故障转移配置的关键点。
MySQL MHA 是一个用于 MySQL 高可用集群的工具集合,主要由两部分组成:
MHA 的核心优势在于其基于半同步复制的特性,能够实现快速的故障转移,同时确保数据一致性。对于依赖 MySQL 的企业来说,搭建一个高可用的 MHA 集群可以显著提升系统的可靠性和稳定性。
在开始搭建之前,需要确保以下环境准备完成:
perl、perl-DBI、perl-DBD-mysql 等 Perl 模块,这些是 MHA 的运行依赖。rsync 和 ssh 工具,用于数据同步和节点间的文件传输。在管理节点上安装 MHA Manager:
# 下载 MHA Managerwget https://github.com/yoshinari-natsume/mha4mysql-manager/archive/refs/tags/v0.5.10.zip# 解压并安装unzip mha4mysql-manager-0.5.10.zipcd mha4mysql-manager-0.5.10perl Makefile.PLmakemake install在所有 MySQL 节点上安装 MHA Node:
# 下载 MHA Nodewget https://github.com/yoshinari-natsume/mha4mysql-node/archive/refs/tags/v0.5.10.zip# 解压并安装unzip mha4mysql-node-0.5.10.zipcd mha4mysql-node-0.5.10perl Makefile.PLmakemake install-- 启用半同步复制SET GLOBAL rpl_semi_sync_master_enabled = 1;my.cnf 文件,添加以下内容:[mysqld]log_bin = mysql-bin.logbinlog_format = ROWSrpl_semi_sync_master_enabled = 1-- 配置从节点CHANGE MASTER TO MASTER_HOST = '主节点IP', MASTER_USER = '复制用户', MASTER_PASSWORD = '复制密码', MASTER_LOG_FILE = 'mysql-bin.log', MASTER_LOG_POS = 0;-- 启用半同步复制SET GLOBAL rpl_semi_sync_slave_enabled = 1;在 MHA Manager 节点上创建配置文件 /etc/mha/app.conf,内容如下:
[application]description = "MySQL MHA 高可用集群"candidate_master = truemaster_check_interval = 60master_check_retries = 3[mysqldump]user = mha_userpassword = mha_password创建 /etc/mha/hosts 文件,列出所有 MySQL 节点:
[mysqld]主节点IP从节点IP在 MHA Manager 节点上启动 MHA 服务:
# 启动 MHA Managermha_manager --start --conf=/etc/mha/app.conf在所有 MySQL 节点上启动 MHA Node 服务:
# 启动 MHA Nodemha_node --start --conf=/etc/mha/app.conf在 MHA Manager 节点上执行以下命令,模拟主节点故障:
# 模拟主节点故障mha_manager --start --conf=/etc/mha/app.conf --command=stop_and_check --ssh_user=rootMHA Manager 会自动检测主节点故障,并执行故障转移操作。此时,从节点会升级为主节点,系统会自动切换到新的主节点。
在 MHA Manager 节点上配置自动故障转移脚本 /etc/mha/transfer_master.sh,内容如下:
#!/bin/bash# 获取当前主节点current_master=$(mysql -h127.0.0.1 -uadmin -padmin -e "SHOW MASTER STATUS;" | grep File | awk '{print $1}')# 获取从节点列表slaves=$(mysql -h127.0.0.1 -uadmin -padmin -e "SHOW SLAVE STATUS;" | grep -i 'Slave_SQL_Running: Yes' | awk '{print $1}')# 判断是否有从节点可用if [ -z "$slaves" ]; then echo "没有可用的从节点,无法执行故障转移。" exit 1fi# 执行故障转移mha_manager --start --conf=/etc/mha/app.conf --command=change_master --ssh_user=root将脚本设为可执行:
chmod +x /etc/mha/transfer_master.shinnodb_buffer_pool_size 和 query_cache_type 等参数。Percona Monitoring 或 Prometheus 监控 MySQL 集群的状态。mysqldump 或 xtrabackup 工具进行定期备份。MySQL MHA 高可用集群的搭建和故障转移配置是确保企业数据库系统稳定运行的关键步骤。通过合理配置和优化,可以显著提升系统的可靠性和性能。如果您需要进一步的技术支持或试用相关工具,请访问 申请试用 了解更多详情。
申请试用&下载资料