MySQL Group Replication(MGR):组复制技术详解
概述
MySQL Group Replication(MGR,组复制)是 MySQL 5.7.17 引入的一种高可用与高一致性复制方案。与传统的异步/半同步复制不同,MGR 基于 Paxos 协议 实现分布式一致性,多个节点组成一个复制组,组内每个节点都持有完整数据副本。
核心概念
组(Group)
MGR 中的多个 MySQL 实例组成一个复制组:
┌──────────────────────────────────────────┐
│ MGR Group │
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ Node1 │◄───►│ Node2 │◄───►│ Node3 │ │
│ │ │ │ │ │ │ │
│ │ Primary│ │Secondary│ │Secondary│ │
│ └──────┘ └──────┘ └──────┘ │
│ │ │ │ │
│ └───────────┴───────────┘ │
│ 组通信(GCS):Paxos │
└──────────────────────────────────────────┘
两种模式
| 模式 | 描述 | 适用场景 |
|---|---|---|
| 单主模式(Single-Primary) | 只有主节点可写,其他节点只读 | 多数场景 |
| 多主模式(Multi-Primary) | 所有节点都可写 | 需要多节点写入 |
默认推荐单主模式——多主模式下的事务冲突处理更复杂。
单主模式工作流程
客户端写入请求 → Router → Primary Node
│
1. 本地执行事务(使用乐观锁)
2. 事务提交前,广播到组
3. Paxos 协议 → 组内达成一致
4. 所有节点执行事务
5. 返回客户端成功
-- 单主模式下只有 Primary 可写
-- Secondary 节点执行写操作会报错:
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
核心配置
所有节点的基础配置
[mysqld]
server-id = 1 # 每个节点不同
gtid_mode = ON # MGR 必须开启 GTID
enforce_gtid_consistency = ON # 强制 GTID 一致性
# Group Replication 配置
plugin_load_add = 'group_replication.so'
transaction_write_set_extraction = XXHASH64
# 组配置
group_replication_group_name = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot = OFF
group_replication_bootstrap_group = OFF
group_replication_local_address = "192.168.1.10:33061" # 组内通信地址
group_replication_group_seeds = "192.168.1.10:33061,192.168.1.11:33061,192.168.1.12:33061"
# 单主模式
group_replication_single_primary_mode = ON
创建复制用户
-- 所有节点执行
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE, BACKUP_ADMIN ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
引导组(第一个节点)
-- Node1:引导组
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
-- 检查成员
SELECT * FROM performance_schema.replication_group_members;
-- +---------------------------+------+-------------+-------------+
-- | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_STATE |
-- +---------------------------+------+-------------+-------------+
-- | group_replication_applier | xxx | node1 | ONLINE |
-- +---------------------------+------+-------------+-------------+
加入组(其他节点)
-- Node2, Node3:加入组
START GROUP_REPLICATION;
-- 再次检查
SELECT * FROM performance_schema.replication_group_members;
-- +------+---------+-------------+
-- | node1 | ONLINE | PRIMARY | ← 主节点
-- | node2 | ONLINE | SECONDARY | ← 从节点
-- | node3 | ONLINE | SECONDARY | ← 从节点
-- +------+---------+-------------+
故障切换
自动故障切换(单主模式)
节点健康状况:
Node1 (Primary) ⚡ 宕机
│
├── 剩余节点检测到 Node1 不可用
├── Paxos 重新选举
├── Node2 自动当选为新的 Primary
└── 应用重连后正常写入 Node2 ✅
检测间隔:group_replication_member_expel_timeout(默认 5 秒)
-- 故障后查看
SELECT * FROM performance_schema.replication_group_members;
-- +-------+-----------+-------------+
-- | node2 | ONLINE | PRIMARY | ← 自动变为新的主节点
-- | node3 | ONLINE | SECONDARY |
-- +-------+-----------+-------------+
MGR 的优缺点
优点
| 特性 | 说明 |
|---|---|
| 强一致性 | Paxos 保证所有节点数据一致 |
| 自动故障切换 | 无需外部工具,自动选举新主 |
| 成员管理 | 自动检测节点加入/离开 |
| 多节点写入(多主) | 所有节点可写(需处理冲突) |
| 无单点故障 | 任何一个节点挂掉不影响服务 |
缺点
| 限制 | 说明 |
|---|---|
| 网络要求高 | 节点间延迟建议 < 10ms |
| 节点数限制 | 最多 9 个节点,推荐 3-7 个 |
| 性能下降 | Paxos 协议有额外开销 |
| DDL 限制 | 多主模式下 DDL 需特殊处理 |
| MyISAM/系统表限制 | 仅支持 InnoDB |
| 大事务风险 | 大事务会导致组通信阻塞 |
MGR vs 传统复制
| 特性 | 传统复制(异步/半同步) | MGR |
|---|---|---|
| 数据一致性 | 最终一致性 | 强一致性(Paxos) |
| 故障切换 | 需要外部工具(MHA/Orchestrator) | 自动切换 |
| 最大节点 | 无限制(受资源限制) | 最多 9 个 |
| 写入节点 | 单节点 | 单主或多主 |
| 配置复杂度 | 较简单 | 较复杂 |
| 延迟要求 | 没特别要求 | < 10ms 最好 |
面试要点
- MGR 基于 Paxos 协议,实现组内强一致性
- 单主模式是推荐模式(写节点只有一个,无冲突)
- 最多 9 个节点,通常 3 个或 5 个
- 自动故障切换——无需 MHA 等外部工具
- 需 GTID 启用,仅支持 InnoDB
- 网络延迟敏感,跨机房部署需谨慎
- 大事务阻塞——组内所有节点需要为事务达成一致,大事务会导致延迟
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容