Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Responses to Failure Detection and Network Partitioning

20.7.7 Responses to Failure Detection and Network 分区

Group Replication 的故障检测机制旨在识别组成员无法与组通信,并在出现故障时将其驱逐。拥有故障检测机制可以增加组中正确工作的多数成员的可能性,从而确保客户端请求被正确处理。

通常,所有组成员都定期与其他组成员交换消息。如果某个组成员在5秒内没有从特定的同伴成员接收到任何消息,当检测期结束时,它会对该同伴成员产生怀疑。当怀疑超时后,该被怀疑的成员将被假设已经失败,并被驱逐出组。被驱逐的成员将被从其他成员所见的成员列表中移除,但它不知道自己已经被驱逐出组,因此它认为自己在线,而其他成员不可达。如果该成员实际上并没有失败(例如,因为网络问题暂时断开)并且能够恢复与其他成员的通信,它将收到一个视图,其中包含了自己已经被驱逐出组的信息。

在这些情况下,组成员的响应,包括失败的成员本身,可以在过程中的多个点进行配置。默认情况下,如果某个成员被怀疑已经失败,则发生以下行为:

  1. 在 MySQL 8.4 中,当怀疑产生时,添加5秒的等待期后,怀疑超时并且被怀疑的成员将面临驱逐。

  2. 如果被驱逐的成员恢复通信并意识到自己已经被驱逐,它自动尝试重新加入组三次(每次尝试之间有5分钟的间隔);如果自动重新加入程序不成功,它然后停止尝试重新加入组。

  3. 当被驱逐的成员不再尝试重新加入组时,它将切换到超级只读模式并等待操作员注意。

您可以使用本节中描述的 Group Replication 配置选项来永久或临时地更改这些行为,以适应您的系统需求和优先级。如果您遇到由于网络延迟或机器速度慢、网络频繁出现意外暂停或计划性网络中断等情况而导致不必要的驱逐,可以考虑增加驱逐超时时间和自动重新加入尝试次数。虽然成员在执行默认行为时不接受写入,但仍可以进行读取操作,如果成员仍然与客户端通信,随着时间的推移,可能出现越来越多的过期读取。如果避免过期读取对您更重要,您可以考虑减少驱逐超时时间和自动重新加入尝试次数或将其设置为零。

未失败的成员可能由于网络分区而与复制组的一部分失去联系。例如,在一个由5个服务器组成的群组(S1、S2、S3、S4、S5)中,如果出现了(S1、S2)和(S3、S4、S5)的断开连接,那么就出现了网络分区。现在,第一个组(S1、S2)变成了少数,因为它无法与群组的多半部分保持联系。 minority 组中的成员处理的事务将被阻塞,因为大多数组是不可达的,因此群组不能达到_quorum。关于这个场景的详细描述,请见第20.7.8节,“处理网络分区和_quorum丢失”。在这种情况下,默认行为是 minority 和 majority 组中的成员都保持在组中,继续接受事务(虽然 minority 组中的成员被阻塞),并等待操作员干预。这一行为也可以配置。

注意,在组成员中,如果某个成员运行的是较早的 MySQL 服务器版本,该版本不支持相关设置,或者该版本具有不同的默认值,那么这些成员将根据上述默认行为对自己和其他组成员进行操作。例如,不支持group_ replication_member_expel_timeout系统变量的成员一旦检测到过期怀疑,就会将其他成员驱逐出去,而其他成员,即使支持该系统变量且设置了更长的超时时间,也会接受这种驱逐行为。