MySQL MGR高可用集群搭建与优化实践

📅 2026/8/8 2:03:46
MySQL MGR高可用集群搭建与优化实践
1. MySQL MGR高可用集群概述MySQL Group Replication简称MGR是MySQL官方在5.7.17版本推出的原生高可用解决方案。与传统的异步复制和半同步复制不同MGR基于Paxos协议实现了真正的多主架构允许所有节点同时处理写请求并通过组通信机制保证数据一致性。我在金融行业的生产环境中使用MGR已有三年时间处理过多次主库故障自动切换的场景其稳定性经受住了实际考验。MGR的核心优势在于自动故障检测与转移节点故障时能在秒级完成主从切换多主写入支持所有节点均可处理写请求需配置为多主模式数据强一致性基于GTID的复制确保数据不丢失冲突检测机制自动解决不同节点间的写冲突2. 集群规划与环境准备2.1 硬件配置建议根据我的经验生产环境建议采用以下配置服务器至少3台推荐奇数台满足Paxos多数派原则CPU8核以上写密集型业务需要更多计算资源内存16GB起步大型数据库需要按数据量比例增加磁盘SSD阵列RAID10配置保证IOPS在5000以上网络万兆内网互联节点间延迟应1ms重要提示切勿在虚拟化环境或云主机上混布MGR节点物理隔离能避免资源争抢导致的脑裂问题。2.2 软件版本选择当前稳定版本组合操作系统CentOS 7.9/8.4或Ubuntu 20.04 LTSMySQL版本8.0.28建议使用最新GA版本依赖组件libaio、numactl、openssl安装基础依赖包# CentOS yum install -y libaio numactl openssl # Ubuntu apt-get install -y libaio1 libnuma1 openssl3. MySQL安装与基础配置3.1 二进制包安装推荐使用官方二进制包安装避免编译带来的环境差异# 下载解压 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-linux-glibc2.17-x86_64.tar.xz tar xvf mysql-8.0.28-linux-glibc2.17-x86_64.tar.xz -C /usr/local/ ln -s /usr/local/mysql-8.0.28-linux-glibc2.17-x86_64 /usr/local/mysql # 创建用户和数据目录 groupadd mysql useradd -r -g mysql -s /bin/false mysql mkdir -p /data/mysql/{data,logs,tmp} chown -R mysql:mysql /data/mysql3.2 关键参数配置/etc/my.cnf基础配置模板[mysqld] # 基础配置 datadir/data/mysql/data socket/tmp/mysql.sock log-error/data/mysql/logs/mysqld.log pid-file/data/mysql/mysqld.pid # 字符集设置 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci # 连接配置 max_connections1000 thread_cache_size100 table_open_cache4000 # InnoDB配置 innodb_buffer_pool_size12G # 建议为物理内存的70% innodb_log_file_size2G innodb_flush_log_at_trx_commit1 innodb_flush_methodO_DIRECT4. MGR集群搭建实战4.1 初始化数据目录在所有节点执行/usr/local/mysql/bin/mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql/data使用--initialize-insecure参数可以免去初始密码但生产环境建议使用--initialize生成随机密码并妥善保存。4.2 启动MySQL服务创建systemd服务文件/etc/systemd/system/mysqld.service[Unit] DescriptionMySQL Server Afternetwork.target [Service] Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE65535 Restarton-failure RestartSec5 [Install] WantedBymulti-user.target启动服务systemctl daemon-reload systemctl start mysqld systemctl enable mysqld4.3 配置MGR专用参数在每个节点的my.cnf中添加MGR专属配置# MGR基础配置 server_id1 # 每个节点必须唯一 gtid_modeON enforce_gtid_consistencyON binlog_checksumNONE log_binbinlog binlog_formatROW master_info_repositoryTABLE relay_log_info_repositoryTABLE transaction_write_set_extractionXXHASH64 # MGR插件配置 plugin_load_addgroup_replication.so group_replication_group_nameaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa # 集群UUID group_replication_start_on_bootOFF group_replication_local_address192.168.1.101:33061 # 当前节点内网IP group_replication_group_seeds192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061 group_replication_bootstrap_groupOFF4.4 创建复制专用账户在主节点执行CREATE USER repl% IDENTIFIED BY Repl1234; GRANT REPLICATION SLAVE ON *.* TO repl%; GRANT BACKUP_ADMIN ON *.* TO repl%; FLUSH PRIVILEGES;4.5 启动MGR集群在第一个节点引导集群-- 安装插件 INSTALL PLUGIN group_replication SONAME group_replication.so; -- 引导集群只在第一个节点执行 SET GLOBAL group_replication_bootstrap_groupON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_groupOFF; -- 检查集群状态 SELECT * FROM performance_schema.replication_group_members;在其他节点加入集群-- 设置复制通道 CHANGE MASTER TO MASTER_USERrepl, MASTER_PASSWORDRepl1234 FOR CHANNEL group_replication_recovery; -- 启动组复制 START GROUP_REPLICATION;5. 集群管理与监控5.1 常用管理命令查看集群状态SELECT * FROM performance_schema.replication_group_members; SELECT * FROM performance_schema.replication_group_member_stats;手动切换主节点-- 在要提升为主节点的服务器上执行 STOP GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_groupON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_groupOFF;5.2 监控指标配置建议配置以下监控项集群节点状态group_replication_member_state事务冲突计数count_transactions_remote_in_applier_queue网络延迟group_replication_communication_information事务认证信息count_transactions_in_queuePrometheus监控示例配置- job_name: mysql_mgr static_configs: - targets: [192.168.1.101:9104, 192.168.1.102:9104, 192.168.1.103:9104] metrics_path: /metrics params: collect[]: - global_status - group_replication6. 故障处理与优化6.1 常见问题排查节点无法加入集群检查防火墙规则iptables -L -n | grep 33061验证网络连通性telnet 192.168.1.102 33061查看错误日志tail -f /data/mysql/logs/mysqld.log事务冲突处理-- 查看冲突事务 SELECT * FROM performance_schema.replication_group_member_stats WHERE member_id server_uuid\G -- 临时提高冲突检测超时秒 SET GLOBAL group_replication_transaction_size_limit1000000;6.2 性能优化建议网络优化使用专用网络接口用于MGR通信设置group_replication_compression_threshold1000000启用压缩参数调优group_replication_flow_control_modeQUOTA group_replication_flow_control_applier_threshold25000 group_replication_flow_control_certifier_threshold25000硬件优化为MGR流量配置QoS保证带宽使用支持RDMA的高速网卡7. 生产环境最佳实践7.1 安全加固措施网络隔离为MGR通信配置单独的VLAN使用TLS加密组通信SET GLOBAL group_replication_ssl_modeREQUIRED;权限控制REVOKE ALL PRIVILEGES ON *.* FROM repl%; GRANT REPLICATION SLAVE, BACKUP_ADMIN ON *.* TO repl10.%.%.%;7.2 备份策略推荐采用Percona XtraBackup进行物理备份# 全量备份 xtrabackup --backup --target-dir/backups/full --userbackup --passwordBackup1234 # 准备备份 xtrabackup --prepare --target-dir/backups/full # 流式备份到远程 xtrabackup --backup --streamxbstream --target-dir./ | ssh backup01 xbstream -x -C /backups/incr/7.3 版本升级方案滚动升级步骤从最后一个加入的节点开始升级执行STOP GROUP_REPLICATION停止组复制升级MySQL软件包启动新版本MySQL并加入集群验证节点状态正常后继续升级下一个节点我在实际运维中发现8.0.23版本对大型事务的支持有明显改进建议生产环境至少升级到此版本。