MySQL Group Replication(MGR)的核心工作原理
MySQL Group Replication(MGR)的核心工作原理在于它实现了 基于 Paxos 变种协议(组通信系统引擎XCom)的、原子广播(Atomic Broadcast)的多主/单主强同步复制机制。它将传统的异步主从复制提升到了一个多节点协同、高一致性的分布式系统层级。
以下是其工作原理的关键环节:
组成员(Group Membership):
- 多个 MySQL 服务器(通常至少3个)组成一个 “组”(Group)。每个节点都运行着 Group Replication 插件。
- 组内成员自动管理加入和退出。每个成员都知道组内其他所有成员的状态(ONLINE,RECOVERING,UNREACHABLE, OFFLINE, ERROR等)。
- 成员之间通过专用网络通道进行通信(组复制通信栈)。
组通信引擎(XCom):
- 这是 MGR 的底层核心组件,实现了确保消息可靠、有序传递的分布式共识协议(基于Paxos变种)。
- 关键功能: 负责在整个组内对消息(主要是二进制日志事务事件)进行原子广播(Atomic Broadcast)。这意味着:
- 全有或全无: 消息要么被成功传递到组内的每个 ONLINE 节点,要么任何节点都未成功传递(提供原子性)。
- 可靠有序: 消息以完全相同的全局顺序传递到所有 ONLINE 节点(提供一致性)。即使出现网络中断或节点故障,只要通信恢复后重新达成共识,新消息也会按相同的总序追加。
- XCom 利用 “多数派原则(Quorum)” 来达成共识。任何事务要在组内提交,必须获得大多数(N/2+1,N为组大小)节点的投票确认。这确保了网络分区时最多只有一个多数派子组能够继续工作(避免“脑裂”),并提供了容错能力(例如,3节点容忍1个节点故障,5节点容忍2个节点故障)。
事务生命周期(以单主模式写Primary节点为例):
- 本地执行与写入日志: 客户端发起一个写事务,在当前的主节点(Primary) 上执行SQL语句。和单机一样,数据首先在引擎层面修改并生成 Undo/Redo 日志。
- Prepare & Write Binlog: 事务准备提交时(进入提交阶段),主节点将其对应的所有修改事件(Binary Log Events)写入本地的 binlog 文件(写入 Page Cache)。此时事务数据尚未持久化(sync_binlog=0)到磁盘(为了性能)。
- 广播 & 收集认证(Certification):
- 主节点将通过 Group Replication Channel 将包含这些 binlog events 的消息广播给组内所有其他节点(包括自己)。
- 所有节点收到消息后,首先进行 “冲突检测(Certification)”:
- 将接收到的事务标识符(包括主节点的
server_uuid和该节点的事务序列号seq_no)与本地的 “已认证事务集” 进行比对。 - 检查该事务修改的数据是否与当前节点上已经提交的并发(时间段有重叠) 事务修改了相同的行(Row-Level),但来自不同的节点(依赖写入集
WRITESET和gtid_executed)。 - 若无冲突: 该事务在该节点上获得预认证通过,计入“已认证事务集”。
- 若有冲突: 该事务被标记为失败(会在主节点上回滚)。
- 将接收到的事务标识符(包括主节点的
- 达成共识 & 投票:
- 所有节点(包括主节点自己)在完成本地的冲突检测后,会独立地对广播消息(事务是否可应用)进行投票(通常是“准备就绪”或“有冲突”)。
- XCom 引擎负责收集这些投票。
- 当主节点收到 超过半数组成员(包括主节点自己) 的“准备就绪”确认消息时,意味着该事务在组内达成了共识(多数派节点认为事务无冲突且可以应用)。此时主节点知道该事务可以安全地在组内提交。
- 主节点提交(Commit):
- 主节点收到足够多的投票后,执行真正的事务提交操作(
COMMIT)。 - 确保 Binlog Event 和 数据更改通过 fsync 持久化到磁盘(此时 sync_binlog 设置才生效,但 MGR 依赖内部保障)。
- 向客户端返回“事务成功”信息。注意:客户端在收到成功响应时,意味着事务已在组内达成共识并持久化在主节点上,但尚未在所有从节点上持久化。
- 主节点收到足够多的投票后,执行真正的事务提交操作(
- 从节点应用(Apply):
- 其他节点(副本节点,Secondary)在本地冲突检测通过后,就已经将事务对应的 binlog events 写入本地的 relay log 文件(写入 Page Cache)。
- 当它们收到主节点“已达成共识”的指示(隐含在协议的推进中),就知道该事务在主节点已提交。
- 副本节点上的回放线程(Applier Thread) 开始读取并应用 relay log 中的事件,将这些更改写入本地数据库(在数据页和引擎层持久化)。这通常是异步发生的,但 MGR 的一致性级别设置可影响应用的时机。
- 最终一致性保证: 因为事务是按全局一致、全序(binlog event order) 到达每个节点的,并且应用过程是串行的,所以所有在线且稳定的节点最终都会拥有一致的状态(相同的数据和事务提交顺序)。
自动故障转移(Failure Detection & Failover - 单主模式下):
- 组内成员持续相互监控(通过心跳消息)。
- 如果某个成员(尤其是主节点)长时间没有心跳或被多数派判断为失效,它会被自动驱逐(Expelled) 出组。
- 如果失效的是主节点,剩余的在线节点(需要构成多数派)会自动协商并触发一次新的选举。
- 选举算法基于 server_uuid + 事务序列号(seq_no)排序:选择具有最新状态(拥有最高 seq_no,即最多已提交事务)的节点为新主(Primary)。如果多个节点具有相同的 seq_no,则选择 server_uuid 最小的节点。这样确保了新主拥有所有已提交事务。
- 自动重新配置: 组拓扑自动更新,所有剩余节点和连接到此组的 Router 都会感知到新的主节点是谁。
- 客户端(通过 Router)透明地重定向到新的主节点。
关键特性总结:
分布式一致性: 保证组内所有节点在稳定状态下拥有完全相同的数据视图和严格一致的提交顺序。
基于共识的高可用: 使用多数派原则(Paxos-like)达成共识,提供自动化的成员管理和主节点选举。
内置冲突检测(多主模式): 检测并解决不同节点并发修改同一行数据引起的冲突。
故障容错: 可以容忍 (N-1)/2 个节点的失败(N为总节点数)。
灵活模式: 支持单主模式(推荐)(一个节点处理所有写)和多主模式(所有节点可读写,需小心冲突处理)。
性能折衷: 强一致性通过同步通信(消息广播、冲突检测、等待多数派投票)实现,相对于异步复制会带来额外的网络延迟开销。网络性能和稳定性对 MGR 的效率和可用性至关重要。
核心流程简化记忆:
客户端写操作 -> 主节点执行 -> 主节点写binlog -> 广播事务到组 -> 所有节点进行冲突检测(Certification) -> 所有节点对事务投票 -> 主节点收集投票 -> 达到多数派同意 -> 主节点提交(持久化) -> 返回客户端成功 -> 从节点异步应用更改
理解 XCom 引擎的原子广播协议和分布式共识、内置的冲突检测/解决机制(Certification)、以及基于多数派决策的故障转移机制,是掌握 MySQL Group Replication 工作原理的核心。
MySQL Group Replication(MGR)的核心工作原理的更多相关文章
- Mysql Group Replication 简介及单主模式组复制配置【转】
一 Mysql Group Replication简介 Mysql Group Replication(MGR)是一个全新的高可用和高扩张的MySQL集群服务. 高一致性,基于原生复制及p ...
- Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结
之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...
- 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(一)
导读: 在之前,我们搭建了MySQL组复制集群环境,MySQL组复制集群环境解决了MySQL集群内部的自动故障转移,但是,组复制并没有解决外部业务的故障转移.举个例子,在A.B.C 3台机器上搭建了组 ...
- mysql group replication观点及实践
一:个人看法 Mysql Group Replication 随着5.7发布3年了.作为技术爱好者.mgr 是继 oracle database rac 之后. 又一个“真正” 的群集,怎么做到“ ...
- MySQL Group Replication配置
MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...
- MySQL Group Replication 介绍
2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...
- Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
mit 分布式论文集 https://github.com/feixiao/Distributed-Systems wiki上描述的几种都明白了就出师了 raft 和 zab 是类似的,都是1.先选举 ...
- MySQL Group Replication 技术点
mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...
- Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication Overview Galera Cluster 由 Coders ...
- mysql group replication 主节点宕机恢复
一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...
随机推荐
- 【译】Visual Studio 推出预览版 Agent 模式
规划.构建.测试.修复 -- 一切只需一个提示. Visual Studio 17.14 版本已向所有用户公开预览版 Agent 模式.Visual Studio 中的 Agent 模式允许您使用自然 ...
- 妙妙线段树+DFS序判断子孙节点,但似乎还可以树链剖分?(CF Div3 909 G)
G. Unusual Entertainment 原题链接:https://codeforces.com/contest/1899/problem/G 题目大意: 给定一棵树,根节点为1,给定一个\( ...
- codeup之等腰梯形
Description 请输入高度h,输入一个高为h,上底边长为h 的等腰梯形(例如h=4,图形如下). **** ****** ******** ********** Input 输入第一行表示样例 ...
- OS期末复习总结
期末样题 : 链接:https://pan.baidu.com/s/12Mfi_lnhBDbuke6B_qCiJg 提取码:khp7 一.易错易混点: 下列进程调度算法中,可能引起进程长时间得不到运行 ...
- 分享95套Java实战项目,一次学个够
第01项目:SSM大型互联网电商项目(视频+源码) 第02项目:SSM分布式互联网商城(视频+文档资料) 第03项目:SSM开发大中点平 (视频+源码) 第04项目:SSM分布式苗杀系统企业级实战(视 ...
- Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)题解A~D
A - Cut 题意: 将数组的后k个字符移到前面 思路: 可以用rotate()函数让数组中的元素滚动旋转 rotate(v.begin(), v.begin() + n - k, v.end()) ...
- 计算机组成原理 L03 计算单元(ALU)复习-1
计算机组成原理 L03 计算单元(ALU)复习-1 进位传输函数和进位产生函数 类推得到 gi 与操作得到 0000 0000 0010 0011 pi 或操作得到 1111 1111 1111 10 ...
- AI 制作游戏美术素材流程分享(程序员方向粗糙版)
AI 制作游戏美术素材分享(程序员方向粗糙版) 视频讲解: 抖音:https://www.douyin.com/user/self?from_tab_name=main&modal_id=75 ...
- SQL语句between and边界问题
BETWEEN AND 需要两个参数,即范围的起始值a和终止值b,而且要求a<b.如果字段值在指定的[闭区间[a,b]]内,则这些记录被返回:否则,记录不会被返回. 字段值可以是数值.文本 ...
- 洛谷 P5012 水の数列
洛谷 P5012 水の数列 Problem 给你一个长度为\(n(n\le10^6)\)的数列,有\(T(T\le 10^3)\)组询问,每一组询问查询区间\([l,r]\),请选择一个\(x\),将 ...