# 18.1.4.2故障检测

组复制的故障检测机制是一种分布式服务,它能够识别组中的一台服务器没有与其他服务器通信,因此被怀疑已停止服务。如果该组织的共识是怀疑可能是真的,则该组织会采取协调一致的决定驱逐该成员。驱逐一个没有沟通的成员是必要的,因为该集团需要其大多数成员就交易或观点变更达成一致。如果某个成员没有参与这些决策,集团必须将其删除,以增加该集团包含大多数正常工作的成员的可能性,从而可以继续处理交易。

在复制组中,每个成员都有一个指向其他成员的点对点通信通道,从而创建一个完全连接的图。这些连接由组通信引擎(XCom,一种Paxos变体)管理,并使用TCP/IP套接字。一个通道用于向成员发送消息,另一个通道用于接收来自成员的消息。如果一个成员在5秒钟内没有收到来自另一个成员的消息,它会怀疑该成员失败,并将该成员的状态列为遥不可及在它自己的性能模式表中复制组成员.通常,两名成员会怀疑对方失败,因为他们彼此没有沟通。成员A怀疑成员B失败,但成员B不怀疑成员A失败——可能是由于路由或防火墙问题,这是可能的,但可能性较小。成员也会对自己产生怀疑。一名与团队其他成员隔离的成员怀疑其他成员都失败了。

如果怀疑持续超过10秒,怀疑成员会试图将其认为怀疑成员有错的观点传播给团队的其他成员。怀疑成员只有在它是通知程序时才会这样做,根据其内部XCom节点号计算。如果一名成员实际上与团体的其他成员隔离,它可能会试图传播其观点,但这不会产生任何后果,因为它无法确保其他成员的法定人数就其达成一致。只有当一个成员是通知者,并且其怀疑持续足够长的时间,足以传播给组中的其他成员,并且其他成员同意时,怀疑才会产生后果。在这种情况下,嫌疑成员将在协调决定中被标记为被驱逐出该团体,并在委员会规定的等待期后被驱逐组\复制\成员\驱逐\超时系统变量过期,驱逐机制检测并执行驱逐。

如果网络不稳定,成员之间经常以不同的组合失去或重新建立联系,理论上,一个团体可能最终将其所有成员标记为驱逐出境,之后该团体将不复存在,必须重新建立。为了应对这种可能性,从MySQL 8.0.20开始,Group Replication的Group Communication System(GCS)跟踪被标记为驱逐的组成员,并在决定是否有多数成员时将其视为疑似成员。这样可以确保至少有一名成员留在组中,并且组可以继续存在。当被开除的成员实际上已被开除出该团体时,GCS会删除其标记该成员为开除的记录,以便该成员可以在其有能力的情况下重新加入该团体。

有关可以配置为指定工作组成员对故障情况的响应的组复制系统变量的信息,以及怀疑失败的组成员所采取的操作,请参阅第18.7.7节,“对故障检测和网络分区的响应”.