
文章目录前言一、MGR 集群基础介绍及核心概念解析1.1 复制组1.2 多数派投票机制Paxos1.3 单主模式【生产推荐】1.4 多主模式【仅测试使用】1.5 XCom通信组件1.6 写冲突检测1.7 一致性级别二、MGR 集群的核心作用三、MGR 集群的应用场景四、MGR 集群整体技术特性4.1 优势4.2 劣势五、MGR 集群部署方案六、MGR 集群部署流程6.1 系统基础配置6.2 安装MySQL8.06.3 配置my.cnf6.4 创建复制账户所有节点执行5.5 安装组复制插件6.6 引导第一个节点主节点6.7 验证数据同步6.8 故障切换测试与恢复6.8.1 模拟主节点宕机6.8.2 恢复原主节点七、MGR 架构管理7.1 自动启动组复制7.2 优先级选举7.3 故障检测与恢复7.4 连接路由7.5 备份策略7.6安全加固总结前言随着企业业务系统对数据库可用性和数据一致性要求的不断提高传统的主从复制架构在面对主库故障时存在切换时间长、可能丢失数据、需要人工介入等痛点难以满足关键业务对高可用的严苛要求。 MGR作为 MySQL 官方原生提供的高可用解决方案基于分布式 Paxos 协议实现了数据强一致性和自动故障切换当主库发生故障时集群可在秒级内自动完成新主选举无需人工干预从根本上提升了数据库服务的连续性。本文档旨在提供一套完整的 MySQL 8.0 MGR 单主高可用集群部署方案。通过本方案的实施可构建一个具备自动故障恢复的高可用数据库集群为企业核心业务提供稳定、可靠的数据库服务支撑。一、MGR 集群基础介绍及核心概念解析MGRMySQL Group ReplicationMySQL 组复制MySQL 官方原生高可用集群方案是基于 Paxos 一致性协议实现多节点数据一致性、故障自动检测与主节点自动切换解决了传统主从复制单点故障、数据不一致问题。主要分为单主模式、多主模式生产环境优先使用单主模式。1.1 复制组多个MySQL实例组成一个复制组组内节点互相通信协同共同维护数据一致性。最大支持9个节点生产环境常用3节点部署。1.2 多数派投票机制Paxos所有写事务需要组内半数以上节点确认通过事务才正式生效。示例3节点集群至少2个节点确认写操作才算成功避免数据错乱。1.3 单主模式【生产推荐】集群中仅有1台主节点承担读写业务其余节点为只读。主节点故障集群自动投票选举出新主无需人工干预切换。1.4 多主模式【仅测试使用】集群所有节点都支持读写。容易产生写冲突业务限制多不建议生产环境使用。1.5 XCom通信组件MGR节点之间的内部通信模块负责消息广播、节点存活检测、投票协商。默认通信端口33061和MySQL服务端口3306区分开。1.6 写冲突检测当多个节点同时修改同一行数据MGR会检测到冲突回滚冲突事务保障全集群数据统一。1.7 一致性级别最终一致性能高从节点允许短暂的数据延迟。故障切换安全默认主节点故障切换时保障数据安全兼顾性能生产默认使用。强一致所有节点数据完全实时同步会带来较大性能损耗对比传统主从传统主从故障需要人工切换存在数据不一致风险MGR 实现自动故障转移集群内部保证数据一致性。二、MGR 集群的核心作用自动故障切换实时监控节点状态主节点宕机后自动选主、自动切换业务中断时间大幅缩短。分布式数据强一致依靠投票 冲突检测机制避免传统异步 / 半同步主从的数据延迟、丢失问题。读写分离支撑读请求分发至所有从节点分担主库查询压力提升数据库整体吞吐量。集群自动扩容新增 MySQL 节点可自动同步全量数据快速加入复制组横向扩展读能力。三、MGR 集群的应用场景高可用核心业务电商订单、支付账务、企业后台管理系统不允许数据库长时间停机。数据一致性敏感业务财务、会员积分、库存系统要求多副本数据完全统一杜绝脏数据。中小型业务系统不想引入第三方高可用中间件直接使用 MySQL 原生能力搭建集群。需频繁维护数据库场景定期版本更新、服务器硬件检修需要在线切换主库不中断业务。四、MGR 集群整体技术特性4.1 优势MySQL 官方内置功能无需额外第三方插件兼容性稳定故障自动转移无需人工介入切换主库降低运维失误自带冲突校验天然保障集群多副本数据统一单主模式贴近传统主从使用习惯业务改造成本低。4.2 劣势写入操作存在投票开销写入性能相比单机 MySQL 有损耗集群节点上限 9 台无法支撑大规模节点扩容节点之间对网络质量要求高网络抖动易引发集群异常。五、MGR 集群部署方案部署架构与环境准备本次部署采用 MySQL 8.0 MGR 单主高可用架构共规划三个节点Node110.8.0.10、Node210.8.0.30、Node310.8.0.50。三台服务器均安装 MySQL 8.0统一配置 hosts 解析、关闭防火墙与 SELinux并确保时间同步。MGR 集群通过 Paxos 协议保证数据一致性自动处理节点故障与主库切换。在单主模式下只有 Primary 节点处理写请求Secondary 节点提供读服务配合 MySQL Router 实现读写分离与故障透明切换。部署步骤第一步基础环境与 MySQL 安装三台均执行设置主机名与 hosts 解析关闭防火墙和 SELinux配置 chronyd 时间同步。安装 MySQL 8.0启动服务并修改 root 密码。第二步配置文件修改三台均执行在 /etc/my.cnf 中开启 GTID、设置 Binlog 格式为 ROW添加 MGR 相关参数包括 group_replication_group_name三台必须一致、group_replication_local_address各节点不同和 group_replication_group_seeds填写全部三个节点的 IP:33061。测试环境关闭 SSL。第三步创建复制账号并配置恢复通道三台均执行创建 repl10.8.0.% 用户授予 REPLICATION SLAVE、CONNECTION_ADMIN、BACKUP_ADMIN、GROUP_REPLICATION_STREAM 权限并强制使用 mysql_native_password 插件。关键操作在所有节点执行 CHANGE MASTER TO 时必须显式指定 MASTER_HOST‘10.8.0.10’否则从库恢复通道会指向自身导致数据无法同步。第四步启动集群首先在 Node110.8.0.10上开启引导模式并启动 MGR随后依次在 Node2 和 Node3 上直接执行 START GROUP_REPLICATION 加入集群。通过查询 performance_schema.replication_group_members 确认三个节点状态均为 ONLINE并在主库创建测试表验证数据同步。生产环境建议后续开启 group_replication_start_on_bootON 实现自动启动并部署 MySQL Router 实现读写分离与故障自动切换。六、MGR 集群部署流程6.1 系统基础配置主机名IP地址角色mysql110.8.0.10primarymysql210.8.0.30secondarymysql310.8.0.50secondary# 根据各节点设置主机名hostnamectl set-hostname mysql1# 在10上执行hostnamectl set-hostname mysql2# 在30上执行hostnamectl set-hostname mysql3# 在50上执行# 所有节点统一编辑 /etc/hosts添加cat/etc/hostsEOF 10.8.0.10 mysql1 10.8.0.30 mysql2 10.8.0.50 mysql3 EOF# 关闭防火墙和增强功能systemctl stop firewalld setenforce0#时间同步systemctl start chronydsystemctlenablechronyd chronyc sources-v# 确认同步正常若MS列是以^,*,开头则时间同步6.2 安装MySQL8.0# 卸载系统自带数据库rpm-qa|grepmariadb yum remove mariadb*-y# 添加 MySQL 官方 Yum 仓库cd/optwgethttps://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm# 安装MySQL Serveryuminstall-ymysql-community-server systemctl start mysqld systemctlenablemysqld# 获得mysql版本mysql--version# 获取临时密码并修改密码修改的密码需要数字大小写字母特殊符号greptemporary password/var/log/mysqld.log mysql-uroot-p临时密码ALTERUSERrootlocalhostIDENTIFIED BYYourNewPass2026;6.3 配置my.cnf# 在主服务器配置[mysqld]# 基础设置server_id不同的机器配置不一样server-id1port3306usermysqldatadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pidvalidate_password.policyLOWvalidate_password.length6# 字符集character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci# 关闭全局sslssl0skip-sslrequire_secure_transportOFF# GTID 与二进制日志MGR 必需gtid_modeONenforce_gtid_consistencyONbinlog_formatROWlog_binbinloglog_slave_updatesONmaster_info_repositoryTABLErelay_log_info_repositoryTABLEtransaction_write_set_extractionXXHASH64binlog_transaction_dependency_trackingWRITESETbinlog_checksumNONE# 组复制基本参数#其中三台机器的group_replication_group_name参数必须一致可以通过在任意一台机器执行uuidgen命令获取该参数# group_replication_local_address参数每台机器不一致需要根据该机器的IP设置plugin_load_addgroup_replication.sogroup_replication_group_name525c43ec-2de1-413e-a64d-53767b693f2egroup_replication_start_on_bootOFFgroup_replication_local_address10.8.0.10:33061group_replication_group_seeds10.8.0.10:33061,10.8.0.30:33061,10.8.0.50:33061group_replication_bootstrap_groupOFFgroup_replication_single_primary_modeONgroup_replication_enforce_update_everywhere_checksOFF# MGR 通信禁用 SSL因全局已关闭 SSL必须显式设置group_replication_ssl_modeDISABLEDgroup_replication_recovery_use_sslOFF# 网络与成员管理每台机器的report_host不一样report_host10.8.0.10# 验证ssl禁用mysql-uroot-p-eSHOW VARIABLES LIKE %ssl%;|grephave_ssl6.4 创建复制账户所有节点执行# 临时关闭当前会话的二进制日志记录SETSQL_LOG_BIN0;# 创建 MGR 专用的复制账号只允许来自 10.8.0.x 网段的连接CREATEUSERrepl10.8.0.%IDENTIFIED BYRepl2026;# 授予复制权限节点间同步数据需要GRANT REPLICATION SLAVE ON *.* TOrepl10.8.0.%;# 授予连接管理权限MGR 控制节点连接状态需要GRANT CONNECTION_ADMIN ON *.* TOrepl10.8.0.%;# 授予备份管理权限分布式恢复donor 传输数据需要GRANT BACKUP_ADMIN ON *.* TOrepl10.8.0.%;# MGR 专用权限MySQL 8.0允许该用户参与组复制的事务流GRANT GROUP_REPLICATION_STREAM ON *.* TOrepl10.8.0.%;# 刷新权限表使授权立即生效FLUSH PRIVILEGES;# 恢复二进制日志记录后续操作恢复正常SETSQL_LOG_BIN1;# 配置恢复通道凭据就是告诉 MGR 用这个账号去连接其他节点做数据恢复CHANGE MASTER TOMASTER_USERrepl,MASTER_PASSWORDRepl2026FOR CHANNELgroup_replication_recovery;# 修改 repl 用户的密码加密方式从 MySQL 8.0 默认的强加密算法caching_sha2_password改成 MGR 能识别的旧版加密算法mysql_native_password。ALTERUSERrepl10.8.0.%IDENTIFIED WITH mysql_native_password BYRepl2026;5.5 安装组复制插件# 由于 my.cnf 中已配置 plugin_load_addgroup_replication.so通常已自动安装。若提示 Function group_replication already exists 则忽略。INSTALL PLUGIN group_replication SONAMEgroup_replication.so;6.6 引导第一个节点主节点# 在主服务器上进行# 开启引导模式SET GLOBALgroup_replication_bootstrap_groupON;# 启动 MGRSTART GROUP_REPLICATION;# 关闭引导模式SET GLOBALgroup_replication_bootstrap_groupOFF;# 检查集群成员SELECT * FROM performance_schema.replication_group_members;# 如果已启动但失败确保停止STOP GROUP_REPLICATION;# 清空所有二进制日志和 GTID 执行记录RESET MASTER;# 再次加入集群START GROUP_REPLICATION;#先清空所有二进制日志和GTID 执行记录因为之前做过了修改操作6.7 验证数据同步# 在 PRIMARY 节点当前为 mysql1上执行CREATE DATABASE arr;USE arr;CREATE TABLE uu(id INT PRIMARY KEY, msg VARCHAR(100));INSERT INTO uu VALUES(1,Hello MGR);# 登录任意 SECONDARY 节点查询SELECT * FROM arr.uu;6.8 故障切换测试与恢复6.8.1 模拟主节点宕机# 在 mysql1 上停止组复制或关闭 MySQLSTOP GROUP_REPLICATION;# 在其它节点如 mysql2查看SELECT * FROM performance_schema.replication_group_members;6.8.2 恢复原主节点# 手动启动组复制START GROUP_REPLICATION;七、MGR 架构管理7.1 自动启动组复制验证稳定后将 group_replication_start_on_bootON 写入配置文件并重启MySQL。7.2 优先级选举若希望特定节点更可能成为主库设置权重需要所有节点一致或按需设置group_replication_member_weight80# 值越大越优先默认 507.3 故障检测与恢复调整 group_replication_member_expel_timeout默认5秒8.0.21在网络不稳定时可适当增大避免误驱逐。7.4 连接路由搭配 MySQL Router 或 ProxySQL 实现读写分离和自动故障转移应用无需感知后端主从切换。7.5 备份策略在 SECONDARY 节点上使用 mysqldump 或 MySQL Enterprise Backup 进行备份减轻主库压力。7.6安全加固生产环境建议为 repl 用户限制来源 IP 段已做并定期更换强密码。若后续需要开启 SSL需重新配置证书并调整 group_replication_ssl_mode 为 REQUIRED 或 VERIFY_CA。总结本次方案基于 MySQL 8.0 MGR 技术成功构建了一套三节点单主高可用数据库集群实现了数据强一致性保障和故障自动恢复能力。在生产环境部署中建议开启 group_replication_start_on_bootON 实现节点自动加入并定期在 Secondary 节点执行数据备份以减轻主库压力。特别提醒恢复通道配置时必须显示指定 MASTER_HOST避免从库指向自身导致同步中断。MGR 是 MySQL 官方原生高可用方案部署轻量、运维可控是替代复杂自研架构的理想选择能够为企业核心业务提供稳定、可靠、易扩展的数据库服务支撑。