MySQL Group Replication(MGR):组复制技术详解

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 最好

面试要点

  1. MGR 基于 Paxos 协议,实现组内强一致性
  2. 单主模式是推荐模式(写节点只有一个,无冲突)
  3. 最多 9 个节点,通常 3 个或 5 个
  4. 自动故障切换——无需 MHA 等外部工具
  5. 需 GTID 启用,仅支持 InnoDB
  6. 网络延迟敏感,跨机房部署需谨慎
  7. 大事务阻塞——组内所有节点需要为事务达成一致,大事务会导致延迟
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容