### 18.1.5 组复制插件架构

[](<>)[](<>)[](<>)

MySQL Group Replication 是一个 MySQL 插件，它建立在现有的 MySQL 复制基础架构之上，利用了二进制日志、基于行的日志记录和全局事务标识符等功能。它与当前的 MySQL 框架集成，例如性能模式或插件和服务基础架构。下图是一个框图，描述了 MySQL Group Replication 的整体架构。

[](<>)

**图 18.6 组复制插件框图**

<img alt="The text following the figure describes the content of the diagram." src="images/gr-plugin-blocks.png" height="392" width="391" />

MySQL Group Replication 插件包括一组用于捕获、应用和生命周期的 API，它们控制插件与 MySQL 服务器的交互方式。有一些接口可以使信息从服务器流向插件，反之亦然。这些接口将 MySQL Server 核心与 Group Replication 插件隔离开来，并且主要是放置在事务执行管道中的钩子。在一个方向，从服务器到插件，有事件通知，例如服务器启动、服务器恢复、服务器准备接受连接以及服务器即将提交事务。另一方面，插件指示服务器执行诸如提交或中止正在进行的事务，或在中继日志中排队事务等操作。

Group Replication 插件架构的下一层是一组组件，这些组件在将通知路由到它们时做出反应。捕获组件负责跟踪与正在执行的事务相关的上下文。应用程序组件负责在数据库上执行远程事务。恢复组件管理分布式恢复，并负责通过选择捐助者、管理追赶程序和对捐助者故障作出反应来使加入组的服务器保持最新。

继续往下看，复制协议模块包含复制协议的特定逻辑。它处理冲突检测，并接收事务并将其传播到组。

组复制插件架构的最后两层是组通信系统 (GCS) API，以及基于 Paxos 的组通信引擎 (XCom) 的实现。GCS API 是一个高级 API，它抽象了构建复制状态机所需的属性（请参阅[第 18.1 节，“组复制背景”](group-replication-background.html)）。因此，它将消息传递层的实现与插件的其余上层分离。组通信引擎处理与复制组成员的通信。
