Documentation Home
MySQL 8.0 参考手册  / 第十八章 组复制  / 18.5 组复制操作  / 18.5.4 分布式恢复  /  18.5.4.5 分布式恢复如何工作

18.5.4.5 分布式恢复如何工作

当 Group Replication 的分布式恢复过程从二进制日志执行状态传输时,为了将加入成员与捐赠者同步到特定时间点,加入成员和捐赠者使用 GTID(参见 第 17.1.3 节,“复制具有全球交易标识符”). 但是,GTID 仅提供一种方法来了解加入成员缺少哪些事务。它们无助于标记加入该组的服务器必须赶上的特定时间点,它们也不传递认证信息。这是二进制日志视图标记的工作,它标记二进制日志流中的视图更改,还包含额外的元数据信息,为加入成员提供丢失的认证相关数据。

本主题解释了视图更改和视图更改标识符的作用,以及从二进制日志执行状态传输的步骤。

查看和查看更改

一个视图对应于一组积极参与当前配置的成员,换句话说,在特定时间点。他们在组中正常运行并在线。

当对组配置进行修改时,例如成员加入或离开,就会发生视图更改。任何组成员资格更改都会导致在同一逻辑时间点向所有成员传达独立的视图更改。

视图标识符唯一标识 一个视图。每当发生视图更改时都会生成它。

在组通信层,视图更改及其关联的视图标识符标记了成员加入前后交换的数据之间的边界。这个概念是通过二进制日志事件实现的:“查看更改日志事件”(VCLE)。记录视图标识符以区分在组成员身份发生变化之前和之后传输的事务。

视图标识符本身由两部分构成:随机生成的部分和单调递增的整数。随机生成的部分在创建群组时生成,并且在群组中至少有一个成员时保持不变。每次发生视图更改时,整数都会递增。使用这两个不同的部分使视图标识符能够识别由成员加入或离开引起的增量组更改,并且还可以识别所有成员在完全组关闭时离开组的情况,因此没有信息保留该组所在的视图.

开始:稳定组

所有服务器都在线并处理来自集团的传入交易。某些服务器在复制的事务方面可能有点落后,但最终它们会收敛。该组充当一个分布式和复制的数据库。

图 18.8 稳定组

服务器 S1、S2 和 S3 是该组的成员。 他们所有二进制日志中的最新项目是事务 T20。

查看更改:成员加入

每当新成员加入组并因此执行视图更改时,每个在线服务器都会排队执行视图更改日志事件。这是排队的,因为在视图更改之前,多个事务可以在服务器上排队等待应用,因此,这些属于旧视图。将视图更改事件排在它们之后可以保证正确标记何时发生。

同时,加入会员通过视图抽象从会员服务声明的在线服务器列表中选择合适的捐赠者。一个成员在视图 4 上加入,在线成员将视图更改事件写入二进制日志。

图 18.9 会员加入

服务器 S4 加入该组并寻找捐赠者。 服务器 S1、S2 和 S3 各自将其二进制日志的视图更改条目 VC4 排队。 同时,服务器 S1 正在接收新的交易 T21。

状态转移:迎头赶上

如果组成员和加入成员设置了克隆插件(请参阅 第 18.5.4.2 节,“分布式恢复的克隆”),并且加入成员和组之间的事务差异超过了为远程克隆操作设置的阈值(group_replication_clone_threshold), Group Replication 通过远程克隆操作开始分布式恢复。如果任何组成员的二进制日志文件中不再存在所需的事务,也会执行远程克隆操作。在远程克隆操作期间,加入成员上的现有数据将被删除,并替换为捐赠者数据的副本。当远程克隆操作完成并且加入的成员重新启动时,将执行来自捐赠者二进制日志的状态传输,以获取该组在远程克隆操作进行时应用的事务。如果交易差距不大,或者没有安装克隆插件,

对于来自捐赠者二进制日志的状态传输,在加入成员和捐赠者之间建立连接,然后状态传输开始。这种与捐赠者的交互一直持续到加入组的应用程序线程处理与加入组的服务器进入组时触发的视图更改对应的视图更改日志事件。换句话说,加入该组的服务器从捐赠者那里复制,直到它到达具有与它已经在的视图标记匹配的视图标识符的标记。

图 18.10 状态转移:追赶

服务器 S4 已选择服务器 S2 作为捐赠者。 从服务器 S2 到服务器 S4 执行状态传输,直到到达视图更改条目 VC4 (view_id = VC4)。 服务器 S4 使用一个临时应用程序缓冲区进行状态传输,其二进制日志当前为空。

由于视图标识符在同一逻辑时间传输到组中的所有成员,因此加入组的服务器知道它应该停止复制哪个视图标识符。这避免了复杂的 GTID 集计算,因为视图标识符清楚地标记了哪些数据属于每个组视图。

当加入该组的服务器正在从捐赠者复制时,它也在缓存来自该组的传入事务。最终,它停止从捐赠者复制并切换到应用缓存的那些。

图 18.11 排队的事务

状态转移完成。 服务器 S4 已将事务应用到 T20 并将它们写入其二进制日志。 服务器 S4 在恢复时将视图更改后到达的事务 T21 缓存在临时应用程序缓冲区中。

完成:赶上

当加入该组的服务器识别出具有预期视图标识符的视图更改日志事件时,与捐赠者的连接将终止并开始应用缓存的事务。尽管它在二进制日志中充当标记,定界视图更改,但视图更改日志事件还扮演着另一个角色。它传达了加入组的服务器进入组时所有服务器感知到的认证信息,换句话说,最后一次视图更改。没有它,加入该组的服务器将没有必要的信息来证明(检测冲突)后续交易。

赶上的持续时间不是确定的,因为它取决于工作量和组中传入事务的速率。这个过程是完全在线的,加入该组的服务器在追赶过程中不会阻塞组中的任何其他服务器。因此,当服务器进入该阶段时,加入该组的服务器落后的事务数可能会因此而变化,并因此根据工作负载而增加或减少。

当加入该组的服务器达到零排队事务并且其存储的数据与其他成员相同时,其公共状态变为在线。

图 18.12 在线实例

服务器 S4 现在是该组的在线成员。 它应用了缓存事务 T21,因此它的二进制日志显示与其他组成员的二进制日志相同的项目,并且它不再需要临时应用程序缓冲区。 现在所有组成员都收到并应用了新的传入事务 T22。