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


20.7.7.1 驱逐超时

您可以使用group_ replication_member_expel_timeout系统变量来允许在怀疑成员被驱逐前额外的时间。怀疑是在一个服务器无法从另一个服务器接收消息时创建的,详见第20.1.4.2节,“失败检测”

在Group Replication组成员创建怀疑前,存在一个5秒的检测期限。然后,当另一个成员对其(或自己)产生怀疑时,该组成员将被驱逐。在驱逐机制检测并实施驱逐后,还可能会有一段较短的时间。group_ replication_member_expel_timeout指定了在创建怀疑和驱逐怀疑成员之间等待的秒数,即驱逐超时。怀疑成员将在这个等待期限内被列为UNREACHABLE,但不会从组的成员列表中删除。

  • 如果怀疑成员在等待期限结束前再次变得活跃,成员将应用由剩余组成员缓冲的消息,并进入ONLINE状态,无需操作员干预。在这种情况下,该成员被组视为同一实例。

  • 如果怀疑的成员在怀疑时间过期后才变为活动状态,并且能够恢复通信,它将收到被驱逐的视图,在这个时候它会发现自己已经被驱逐。您可以使用group_ replication_autorejoin_tries使成员自动尝试重新加入组在这个时候。这一特性在MySQL 8.4中默认启用,成员将进行三次自动重连尝试。如果自动重连过程不成功或未尝试,驱逐的成员然后将遵循由group_ replication_exit_state_action指定的退出动作。

只有曾经在组中活动的成员才会受到驱逐前的等待期。从未在组中活动的非成员不会收到这个等待期,因为它们花了太长时间加入组。

如果设置了group_ replication_member_expel_timeout为0,检测期结束后不会等待任何时间,suspected member将立即被驱逐。默认值为5秒,即在检测期过期后5秒内suspected member将被驱逐。虽然所有组成员不需要设置相同的group_ replication_member_expel_timeout值,但建议保持一致以避免意外驱逐。任何成员都可以对其他成员,包括自己,创建怀疑,所以实际的驱逐超时是该组中设置最低值的成员。

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

  • 网络速度较慢,导致默认5秒或10秒前的驱逐时间不足以确保组成员总是能交换至少一个消息。

  • 网络偶尔出现短暂中断,您想避免在这些时候进行不必要的驱逐和主节点更改。

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

  • 预期临时网络中断,不想因为这个原因而驱逐一些或所有成员。

  • 某个机器出现 slowdown 您不想它被驱逐出组。

您可以指定一个到3600秒(1小时)的expel超时时间。确保XCom的消息缓存足够大,以容纳在指定时间段内预期的消息数量,plus初始5秒检测期限,否则成员无法重新连接。您可以使用group_ replication_message_cache_size系统变量调整缓存大小限制。更多信息,请见第20.7.6节,“XCom缓存管理”

如果某个组中的成员当前被怀疑,组成员关系无法重新配置(添加或删除成员或选举新的领导)。如果需要在一或多个成员被怀疑的情况下实现组成员变化,并且您想让怀疑的成员继续留在组中,请执行必要的操作,使成员变为活动状态,如果可能。否则,您可以强制怀疑的成员立即超时。如果您无法使成员变为活动状态,并且想将其从组中驱逐,可以在任何活动成员上改变group_ replication_member_expel_timeout的值,使其小于自怀疑创建以来已经过去的时间。然后,怀疑的成员将立即变为可能被驱逐的对象。

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

如果group_ replication_member_expel_timeout系统变量不可用,想要避免不必要的驱逐,可以查看第20.3.2节,“Group Replication Limitations”中的备选mitigation策略。