20.1.4.2 故障检测
Group Replication的故障检测机制是一种分布式服务,可以识别组中的服务器不与其他服务器通信,且被认为已经出局。如果组内达成一致认定这种怀疑是正确的,那么组将协调决策将该成员驱逐。驱逐不通信的成员是必要的,因为组需要多数成员同意事务或视图变更。如果成员不参与这些决定,组必须将其删除,以增加组中包含正确工作成员的可能性,从而继续处理事务。
在复制组中,每个成员都有与每个其他成员的点对点通信通道,创建了一个完全连接的图形。这些连接由群组通信引擎(XCom,Paxos变体)管理,并使用TCP/IP sockets。其中一个通道用于将消息发送到成员,而另一个通道用于从成员接收消息。如果一个成员在5秒内没有从其他成员接收到消息,它认为该成员已经失败,并将该成员的状态列为UNREACHABLE
在其自己的性能架构表replication_group_members
中。通常,两个成员会互相怀疑对方已经失败,因为它们彼此不在通信。可能的情况是,成员A怀疑成员B已经失败,但成员B不怀疑成员A已经失败——可能由于路由或防火墙问题。一个成员也可以对自己产生怀疑。一个孤立于组中的成员会怀疑所有其他成员已经失败。
如果一个怀疑持续时间超过10秒,怀疑的成员将尝试将其对怀疑成员的观点传播给组中的其他成员。只有当一个成员是通知者(根据其内部XCom节点号计算)时,它才会这样做。如果一个成员实际上与组中的其他成员隔离,它可能会尝试传播其观点,但这将没有任何后果,因为它无法确保其他成员达成一致。只有当一个成员是通知者,且其怀疑持续时间足够长,以便传播到组中的其他成员,并且这些成员同意时,怀疑的成员才会被标记为从组中驱逐。在这种情况下,怀疑的成员将在group_ replication_member_expel_timeout
系统变量到期后被驱逐。
如果网络不稳定,成员频繁地失去和重新连接到其他成员的不同组合中,那么理论上可能会出现一个组将所有成员标记为驱逐,从而导致组的消亡并需要重新设置。为了 countered 这种可能性,Group Replication Group Communication System(GCS)跟踪已经被标记为驱逐的组成员,并在决定是否存在多数时,将它们视为怀疑成员的一部分。这确保至少有一个成员留在组中,组可以继续存在。当实际上已经从组中驱逐的成员被删除时,GCS将删除其记录,以便该成员如果能够重新连接,可以重新加入组。
关于群组复制系统变量,您可以配置以指定工作组成员对故障情况的响应,以及怀疑成员已经失败时所采取的操作,见第20.7.7节,“故障检测和网络分区响应”。