20.5.4 分布式恢复
当成员加入或重新加入复制组时,它必须追赶由组成员在它加入或离开前应用的事务,这个过程称为分布式恢复。
加入成员首先检查其relay日志中的group_replication_applier
渠道,以查找已经从组中接收但尚未应用的交易。如果加入成员之前曾在组中,它可能会找到在它离开前或离开时未被应用的交易,在这种情况下,它将这些事务作为第一个步骤进行应用。新加入组的成员没有任何事务要应用。
然后,加入成员连接到在线现有成员,以执行状态转移。加入成员从现有成员(称为donor)中获取了在它加入或离开时在组中发生的所有事务,然后将这些事务应用于组中在状态转移过程中发生的事务。当这个过程完成后,加入成员已经与组中的其他服务器保持同步,并开始正常地参与组。
分布式恢复期间,Group Replication 使用以下方法进行状态转移:
-
使用克隆插件的远程克隆操作。要启用这个状态转移方法,您必须在组成员和加入成员上安装克隆插件。Group Replication 将自动配置所需的克隆插件设置并管理远程克隆操作。
-
从捐赠者的二进制日志中复制事务,并将这些事务应用于加入成员。这种方法使用标准异步复制渠道
group_replication_recovery
,该渠道在捐赠者和加入成员之间建立。
Group Replication 自动选择最佳的状态转移方法,方法是在您在加入成员上执行START GROUP_REPLICATION
后。为此,Group Replication 检查哪些现有成员适合作为捐赠者、加入成员需要从捐赠者的数量和是否在任何组成员的二进制日志文件中存在所需事务。如果加入成员与可用捐赠者的交易差距较大,或者某些所需事务不在任何捐赠者的二进制日志文件中,Group Replication 将开始分布式恢复操作,并使用远程克隆操作。如果没有较大的交易差距,或者克隆插件未安装,Group Replication 将直接从捐赠者的二进制日志进行状态转移。
-
在远程克隆操作期间,加入成员上的现有数据将被删除,并用捐赠者的数据替换。当远程克隆操作完成并加入成员重新启动时,状态转移从捐赠者的二进制日志中进行,以获取组在远程克隆操作进行时应用的事务。
-
在从捐赠者的二进制日志中进行状态转移期间,加入成员将复制和应用来自捐赠者的二进制日志的所需事务,并将事务应用于接收到的点,即加入成员加入组时的视图变化事件。在此过程中,加入成员将缓冲组应用的事务。当从二进制日志中的状态转移完成后,加入成员将应用缓冲的事务。
当成员服务器与组的所有事务保持同步时,它将被宣布在线,可以像正常成员一样参与组,并完成分布式恢复。
Group Replication 的分布式恢复机制是基于二进制日志的状态转移,如果您的复制组中的捐赠服务器和加入成员不支持克隆,这将是唯一可用的选项。由于状态转移从二进制日志中基于传统异步复制,因此如果加入组的服务器没有组的数据或来自非常老的备份映像,它可能需要很长时间。在这种情况下,建议在添加服务器到组之前,您应该将其设置为使用组的数据通过从已经在组中的服务器转移最近的快照。这可以减少分布式恢复所需的时间,并且减少捐赠服务器的影响,因为它们需要保留和传输较少的二进制日志文件。