默认情况下,由于网络分区而发现自己处于少数的成员不会自动离开组。您可以使用系统变量 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 节,“处理网络分区和失去仲裁” 中介绍。该过程包括检查哪些服务器正常运行,并在必要时强制执行新的组成员身份。