Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

20.7.7.1 驱逐超时

您可以使用 group_replication_member_expel_timeout 系统变量来允许在怀疑创建和成员驱逐之间的额外时间。当一个服务器没有从另一个服务器接收到消息时,怀疑就会创建,如 第 20.1.4.2 节“故障检测”所述。

在 Group Replication 组成员创建怀疑另一个成员(或自己)之前,有一个初始的 5 秒检测期。然后,组成员将被驱逐,当另一个成员(或自己的怀疑)超时时。驱逐机制可能需要一些时间来检测和实施驱逐。group_replication_member_expel_timeout 指定了怀疑创建和驱逐之间的等待时间(以秒为单位),称为驱逐超时。怀疑成员在等待期间被列为 UNREACHABLE,但不会从组成员列表中删除。

  • 如果怀疑成员在等待期间重新激活,它将应用缓存在 XCom 消息缓存中的所有消息,并进入 ONLINE 状态,无需操作员干预。在这种情况下,成员被组视为同一个实例。

  • 如果怀疑成员仅在怀疑超时后重新激活,并能够恢复通信,它将收到一个视图,其中它被驱逐,并意识到自己被驱逐。在这种情况下,您可以使用 group_replication_autorejoin_tries 使成员尝试自动重新加入组。这项功能在 MySQL 8.3 中默认启用,成员将尝试自动重新加入三次。如果自动重新加入过程不成功或未尝试,驱逐的成员将遵循由 group_replication_exit_state_action 指定的退出操作。

等待期仅适用于曾经在组中活动的成员。从未在组中活动的非成员不会获得等待期,并将在初始检测期后被删除,因为它们花费了太长时间加入。

如果 group_replication_member_expel_timeout 设置为 0,则没有等待期,怀疑成员将立即被驱逐,初始 5 秒检测期结束后。默认值为 5,意味着怀疑成员将在初始 5 秒检测期结束后 5 秒被驱逐。不是所有组成员都需要具有相同的 group_replication_member_expel_timeout 设置,但建议这样做,以避免意外的驱逐。任何成员都可以创建对任何其他成员的怀疑,包括自己,因此有效的驱逐超时是成员中最低的设置。

考虑在以下情况下增加 group_replication_member_expel_timeout 的值:

  • 网络很慢,默认的 5 或 10 秒不足以让组成员总是交换至少一条消息。

  • 网络有时会出现暂时性的中断,您想避免不必要的驱逐和主要成员更改。

  • 网络不在您的直接控制下,您想最小化操作员干预的需要。

  • 临时网络中断预计将发生,您不想让一些或所有成员被驱逐。

  • 个别机器经历了减速,您不想让它被驱逐出组。

您可以指定最长 3600 秒(1 小时)的驱逐超时。确保 XCom 消息缓存足够大,以容纳指定时间段内的预期消息量,加上初始 5 秒检测期,否则成员无法重新连接。您可以使用 group_replication_message_cache_size 系统变量调整缓存大小限制。有关更多信息,请参阅 第 20.7.6 节“XCom 缓存管理”

如果组中的任何成员当前处于嫌疑状态,则无法重新配置组成员(通过添加或删除成员或选举新领导者)。如果需要在一或多个成员处于嫌疑状态时实施组成员变更,并且您想让嫌疑成员留在组中,请采取必要的操作以使成员重新激活,如果可能。如果您无法使成员重新激活并且您想将他们从组中驱逐,可以强制嫌疑立即超时。为此,请在任何活动成员上将group_replication_member_expel_timeout的值设置为嫌疑创建以来已过去的时间以下。然后,嫌疑成员将立即面临驱逐。

如果复制组成员意外停止并立即重新启动(例如,因为它使用mysqld_safe启动),它将自动尝试重新加入组,如果group_replication_start_on_boot=on设置。 在这种情况下,重新启动和重新加入尝试可能会在成员的前一个实例被从组中驱逐之前发生,从而成员无法重新加入。组复制自动使用组通信系统(GCS)功能重试成员的重新加入尝试10次,每次重试之间的间隔为5秒。这应该涵盖大多数情况,并允许足够的时间让前一个实例被从组中驱逐,让成员重新加入。请注意,如果group_replication_member_expel_timeout系统变量设置了更长的等待期限之前成员被驱逐,自动重新加入尝试可能仍然不成功。

要避免不必要的驱逐,可以查看第 20.3.2 节,“组复制限制”,其中提供了替代的缓解策略,以避免在group_replication_member_expel_timeout系统变量不可用时的不必要驱逐。