文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  故障检测

20.1.4.2 故障检测

组复制的故障检测机制是一种分布式服务,它能够识别组中的服务器是否没有与其他服务器通信,因此被怀疑已停止服务。如果组的一致性是怀疑可能是真的,那么该组会做出协调一致的决定,将该成员驱逐出去。驱逐未进行通信的成员是必要的,因为该组需要其大多数成员同意事务或视图更改。如果一个成员没有参与这些决定,那么该组必须将其删除,以增加该组包含大多数正常工作的成员的可能性,从而可以继续处理事务。

在复制组中,每个成员都与其他每个成员具有点对点通信通道,从而形成一个完全连接的图。这些连接由组通信引擎(XCom,一种 Paxos 变体)管理,并使用 TCP/IP 套接字。一个通道用于向成员发送消息,另一个通道用于接收来自成员的消息。如果一个成员在 5 秒内未从另一个成员那里收到消息,则它会怀疑该成员已发生故障,并将其在自己的性能架构表 replication_group_members 中的该成员状态列为 UNREACHABLE。通常,两个成员会互相怀疑对方已发生故障,因为它们彼此之间没有进行通信。不过,也可能(尽管不太可能)出现成员 A 怀疑成员 B 已发生故障,而成员 B 却不怀疑成员 A 已发生故障,这可能是由于路由或防火墙问题导致的。一个成员也可以怀疑自身。与组中其他成员隔离的成员会怀疑所有其他成员都已发生故障。

如果怀疑持续超过 10 秒,则怀疑的成员会尝试将它对可疑成员有故障的看法传播到组中的其他成员。只有当怀疑的成员是通知者时,才会这样做,这是根据其内部 XCom 节点号计算得出的。如果一个成员实际上与组中的其他成员隔离,它可能会尝试传播其观点,但不会产生任何后果,因为它无法确保组中其他成员的多数同意该观点。只有当一个成员是通知者,并且其怀疑持续的时间足够长以传播到组中的其他成员,并且其他成员同意该观点时,怀疑才会产生后果。在这种情况下,可疑成员将在协调一致的决定中被标记为从组中驱逐出去,并且在由 group_replication_member_expel_timeout 系统变量设置的等待时间结束后,驱逐机制检测到并实施驱逐时,该成员将被驱逐出去。

当网络不稳定,成员经常以不同的组合失去和重新获得彼此的连接时,从理论上来说,一个组最终可能会将其所有成员都标记为驱逐出去,之后该组将不复存在,必须重新建立。为了解决这种情况,组复制组通信系统 (GCS) 会跟踪已标记为驱逐的组成员,并在决定是否存在多数时将其视为可疑成员组的一部分。这样可以确保至少有一个成员保留在组中,该组可以继续存在。当驱逐的成员实际从组中删除时,GCS 会删除其已标记该成员驱逐的记录,以便该成员能够重新加入组(如果能够的话)。

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