默认情况下,由于网络分区而属于少数的成员不会自动离开组。您可以使用系统变量group_replication_unreachable_majority_timeout
设置一个成员与大多数组成员失去联系后等待的秒数,然后退出组成员。设置超时意味着您不需要在网络分区后主动地监视处于少数组中的服务器,并且可以避免由于不适当的干预而产生分裂情况(具有组成员的两个版本)的可能性。
指定的超时时间group_replication_unreachable_majority_timeout
经过后,所有已由成员和少数组中的其他成员处理的挂起事务将回滚,该组中的服务器将移动到错误
状态。你可以使用group_replication_autorejoin_tries
系统变量,可以从MySQL 8.0.16中获得,使成员在此时自动尝试重新加入组。从MySQL 8.0.21开始,这个特性被默认激活,成员会进行三次自动重新加入尝试。如果自动重新连接过程没有成功或没有尝试,则少数成员将执行指定的退出动作group_replication_exit_state_action
.
在决定是否设置不可到达的多数超时时,请考虑以下几点:
在对称组中,例如有2个或4个服务器的组,如果两个分区包含相同数量的服务器,则两个组都认为自己属于少数,并输入
错误
状态。在这种情况下,组没有功能分区。当少数组存在时,任何由少数组处理的事务都会被接受,但会被阻塞,因为少数服务器无法达到法定人数,直到其中之一
停止GROUP_REPLICATION
在这些服务器上发出,或达到不可到达的多数超时。如果不设置不可达的多数超时时间,少数组中的服务器永远不会进入
错误
自动状态,必须手动停止它们。如果在检测到多数超时丢失后,在少数组中的服务器上设置不可到达的多数超时,则设置该超时无效。
如果不使用group_replication_unreachable_majority_timeout
系统变量,描述了在网络分区的情况下操作员发明的过程第18.5.4节,“网络分区”.该过程包括检查哪些服务器正在运行,并在必要时强制提供新的组成员资格。