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。