17.9.5.1 分布式恢复基础

每当成员加入复制组时,它都会连接到现有成员以执行状态转移。加入该组的服务器将转移加入该组之前在该组中发生的所有事务,这些事务由现有成员(称为* donor *)提供。接下来,加入该组的服务器将应用在该状态转移进行期间在该组中发生的事务。当加入该组的服务器赶上该组中的其余服务器时,它将开始正常加入该组。此过程称为分布式恢复。

Phase 1

在第一阶段,加入该组的服务器选择该组上的一个在线服务器作为其丢失状态的* donor *。施主负责向服务器提供加入该组的所有数据,直到它加入该组为止。这是通过依靠在提供者和加入该组的服务器之间构建的标准异步复制通道来实现的,请参见第 16.2.3 节“复制通道”。通过此复制通道,将复制供者的二进制日志,直到加入该组的服务器成为该组的一部分时发生视图更改为止。加入该组的服务器在收到捐赠者的二进制日志时会应用它们。

复制二进制日志时,加入该组的服务器还将缓存该组内交换的每个事务。换句话说,它正在侦听加入该组之后以及应用捐赠者遗失状态时发生的 Transaction。当第一阶段结束并且到施主的复制通道关闭时,加入组的服务器随后开始第二阶段:追赶。

Phase 2

在此阶段,加入该组的服务器将 continue 执行缓存的事务。当排队 await 执行的事务数最终达到零时,该成员将被声明为联机。

Resilience

当加入该组的服务器从该组中获取二进制日志时,恢复过程可以承受供体故障。在这种情况下,只要捐赠者在阶段 1 期间失败,加入组的服务器就会故障转移到新捐赠者并从该捐赠者中恢复。发生这种情况时,加入组的服务器将关闭与失败的服务器的连接,而失败的服务器将显式加入组,并打开与新施主的连接。这会自动发生。