默认情况下,由于网络分区而发现自己处于少数的成员不会自动离开该组。您可以使用系统变量
group_replication_unreachable_majority_timeout
设置成员在与大多数组成员失去联系后等待的秒数,然后退出组。设置超时意味着您不需要在网络分区后主动监视少数组中的服务器,并且可以避免由于以下原因造成脑裂情况(具有两个版本的组成员身份)的可能性不适当的干预。
当指定的超时时间
group_replication_unreachable_majority_timeout
过去时,少数组中的成员和其他人已处理的所有未决事务都将回滚,并且该组中的服务器将移至该
ERROR
状态。您可以使用
group_replication_autorejoin_tries
MySQL 8.0.16 中提供的系统变量,使成员此时自动尝试重新加入组。从 MySQL 8.0.21 开始,默认情况下启用此功能,并且成员会进行三次自动重新加入尝试。如果自动重新加入过程不成功或未尝试,则少数成员将遵循 指定的退出操作
group_replication_exit_state_action
。
在决定是否设置不可达多数超时时,请考虑以下几点:
在一个对称组中,例如一个有两个或四个服务器的组,如果两个分区包含相同数量的服务器,则两个组都认为自己处于少数状态并进入
ERROR
状态。在这种情况下,该组没有功能分区。当少数群体存在时,接受少数群体处理的任何事务,但由于少数服务器无法达到法定人数而被阻止,直到
STOP GROUP_REPLICATION
在这些服务器上发出或达到无法到达的多数超时。如果不设置多数不可达超时时间,少数组的服务器永远不会
ERROR
自动进入状态,必须手动停止。如果在检测到多数丢失后在少数组中的服务器上设置无法访问的多数超时,则设置无效。
如果您不使用
group_replication_unreachable_majority_timeout
系统变量,则在
第 18.7.8 节“处理网络分区和仲裁丢失”中描述了网络分区时操作员发明的过程。该过程包括检查哪些服务器正在运行,并在必要时强制建立新的组成员身份。