文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


20.7.7.1 驱逐超时

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

在组复制组成员创建对另一个成员(或自身)的怀疑之前,有一个初始的 5 秒检测期。当另一个成员对其(或其自身对其自身的怀疑)超时时,就会驱逐组成员。之后可能还需要一小段时间才能让驱逐机制检测并执行驱逐。 group_replication_member_expel_timeout 指定以秒为单位的时间段,称为驱逐超时,组成员在创建怀疑和驱逐可疑成员之间等待的时间。在等待期间,可疑成员被列为 UNREACHABLE,但不会从组的成员资格列表中移除。

  • 如果可疑成员在怀疑超时前的等待期结束之前再次变得活跃,则该成员将应用 XCom 消息缓存中剩余组成员缓冲的所有消息,并进入 ONLINE 状态,无需操作员干预。在这种情况下,组将该成员视为同一化身。

  • 如果可疑成员仅在怀疑超时后才变得活跃,并且能够恢复通信,则它将收到一个视图,其中它被驱逐,此时它会意识到自己被驱逐。您可以使用 group_replication_autorejoin_tries 使成员此时尝试自动重新加入组。此功能在 MySQL 9.0 中默认处于活动状态,成员会进行三次自动重新加入尝试。如果自动重新加入过程不成功或未尝试,则被驱逐的成员将按照 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 系统变量设置为指定在成员被逐出之前等待更长时间,自动重新加入尝试可能仍然无法成功。

有关避免不必要驱逐的替代缓解策略,其中 group_replication_member_expel_timeout 系统变量不可用,请参见 第 20.3.2 节,“组复制限制”