默认情况下,由于网络分区而发现自己处于少数方的成员不会自动离开组。您可以使用系统变量 group_replication_unreachable_majority_timeout
来设置一个成员在失去与大多数组成员联系后等待的秒数,然后退出组。设置超时意味着您不需要主动监控网络分区后处于少数组中的服务器,并且可以避免由于不恰当的干预而导致出现脑裂情况(组成员身份出现两个版本)。
当由 group_replication_unreachable_majority_timeout
指定的超时到期时,该成员和少数组中的其他成员处理的所有挂起事务都将回滚,并且该组中的服务器将进入 ERROR
状态。您可以使用 group_replication_autorejoin_tries
系统变量来强制成员此时尝试自动重新加入组。此功能默认处于活动状态;该成员会尝试自动重新加入三次。如果自动重新加入过程未成功或未尝试,则少数成员将遵循由 group_replication_exit_state_action
指定的退出操作。
在决定是否设置不可达多数超时时,请考虑以下几点
在对称组中,例如具有两个或四个服务器的组,如果两个分区包含相同数量的服务器,则两个组都认为自己处于少数,并进入
ERROR
状态。在这种情况下,该组没有功能性分区。在少数组存在时,少数组处理的任何事务都会被接受,但会被阻止,因为少数服务器无法达到仲裁,直到在这些服务器上发出
STOP GROUP_REPLICATION
或达到不可达多数超时为止。如果您没有设置不可达多数超时,则少数组中的服务器永远不会自动进入
ERROR
状态,您必须手动停止它们。如果在检测到失去多数后在少数组中的服务器上设置了不可达多数超时,则设置它不会产生任何影响。
如果您不使用 group_replication_unreachable_majority_timeout
系统变量,则在发生网络分区的情况下,操作员干预过程将在 第 20.7.8 节,“处理网络分区和失去仲裁” 中描述。该过程涉及检查哪些服务器正在运行,并在必要时强制进行新的组成员身份。