24.2.11.2. 缺少 Heartbeats 失败检测的原因
有时,群集成员因故障检测(FD)而怀疑,因为某些时间段内未收到心跳确认,T
是由 超时
和 max_tries
定义的。
例如,节点 A、B、C 和 D 的集群,其中 A ping B、B ping C、C ping D 和 D ping A,C 可能会因为以下原因而怀疑:
-
B 或 C 以 100% CPU 运行,超过
T
秒。因此,即使 C 发送心跳确认到 B,B 可能无法处理它,因为它处于 100% 的 CPU 使用率。 - B 或 C 是垃圾收集方式,导致的情况与上方相同。
- 以上两个案例的组合。
- 网络丢失数据包。网络中有很多流量时通常会出现这种情况,交换机开始丢弃数据包,通常首先广播,然后是 IP 多播,最后是 TCP 数据包。
-
B 或 C 正在处理回调。例如,如果 C 在其通道上收到处理用
T
+ 1 秒的远程方法调用,此时 C 将不会处理任何其他消息,包括心跳。因此,B 将不会收到心跳确认,并将怀疑 C。