您可以使用 group_replication_member_expel_timeout
系统变量,在创建怀疑和排除可疑成员之间留出更多时间。如 第 20.1.4.2 节“故障检测” 中所述,当一台服务器没有收到来自另一台服务器的消息时,就会产生怀疑。
在组复制组成员对另一个成员(或自身)产生怀疑之前,有一个初始的 5 秒检测期。当另一个成员对其(或其自身对其自身)的怀疑超时时,就会排除该组成员。之后,在排除机制检测到并实施排除之前,可能会再过一小段时间。 group_replication_member_expel_timeout
指定组成员在创建怀疑和排除可疑成员之间等待的时间段(以秒为单位),称为排除超时。可疑成员在此等待期间被列为 UNREACHABLE
,但不会从组的成员列表中删除。
如果可疑成员在等待期结束时怀疑超时之前再次变为活动状态,则该成员将应用由 XCom 的消息缓存中剩余的组成员缓冲的所有消息,并进入
ONLINE
状态,而无需操作员干预。在这种情况下,该成员被组视为相同的化身。如果可疑成员仅在怀疑超时后才变为活动状态并且能够恢复通信,则它会收到一个视图,其中它被排除,并且在该时间点意识到它被排除了。您可以使用
group_replication_autorejoin_tries
使成员尝试在此时自动重新加入组。此功能在 MySQL 8.4 中默认处于活动状态,并且成员会进行三次自动重新加入尝试。如果自动重新加入过程不成功或未尝试,则被排除的成员将遵循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
的值更改为小于自创建怀疑以来已 elapsed 的时间的值。然后,可疑成员将立即被排除。
如果复制组成员意外停止并立即重启(例如,因为它使用 mysqld_safe
启动),如果设置了 group_replication_start_on_boot=on
,它会自动尝试重新加入该组。在这种情况下,重启和重新加入尝试可能会在成员的前一个实例被驱逐出组之前发生,在这种情况下,该成员无法重新加入。组复制会自动使用组通信系统 (GCS) 功能重试成员的重新加入尝试 10 次,每次重试之间间隔 5 秒。这应该涵盖大多数情况,并留出足够的时间将前一个实例从组中驱逐出去,从而允许成员重新加入。请注意,如果 group_replication_member_expel_timeout
系统变量设置为指定在成员被驱逐之前更长的等待时间,则自动重新加入尝试可能仍然不会成功。
有关避免在 group_replication_member_expel_timeout
系统变量不可用的情况下不必要驱逐的替代缓解策略,请参阅 “第 20.3.2 节“组复制限制””。