MST

星途 面试题库

面试题:Redis 心跳检测中多节点协同的基本原理是什么

请阐述 Redis 心跳检测的多节点协同机制中,各个节点是如何相互协作来确保系统健康状态检测的,包括涉及到的主要信息交互和判断逻辑。
35.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 节点发现

  • Gossip 协议:Redis 集群采用 Gossip 协议进行节点发现。每个节点会定期向其他节点发送 PING 消息,消息中包含自己的状态以及部分已知节点的信息。例如,节点 A 向节点 B 发送 PING 消息,其中携带了节点 A 自身的状态以及它所知道的节点 C、D 的信息。
  • 节点列表更新:接收到 PING 消息的节点会根据消息中的节点信息更新自己的节点列表。如果发现新节点,会将其加入到自己的节点列表中,并尝试与新节点建立连接。

2. 心跳消息交互

  • PING 消息:各个节点周期性地向其他节点发送 PING 消息,通常每秒会向多个随机节点发送。PING 消息携带发送节点的基本信息,如节点 ID、配置纪元、槽分配信息等。这使得接收节点能够及时了解发送节点的状态。
  • PONG 消息:当节点接收到 PING 消息后,会回复 PONG 消息。PONG 消息内容与 PING 消息类似,确认了接收节点的状态,并让发送节点知晓接收节点已收到 PING 消息。例如,节点 B 收到节点 A 的 PING 消息后,回复 PONG 消息,告知节点 A 自己正常运行。
  • FAIL 消息:当一个节点判定另一个节点为疑似下线(PFAIL)时,会向其他节点发送 FAIL 消息,通知其他节点该节点可能已下线。

3. 状态判断逻辑

  • 节点可达性判断:如果节点在一定时间内(如配置的 cluster-node-timeout 时间)没有收到来自某个节点的 PONG 消息,那么该节点会将对方标记为疑似下线(PFAIL)。例如,节点 A 持续一段时间未收到节点 B 的 PONG 回复,则节点 A 标记节点 B 为 PFAIL。
  • 故障确认:当半数以上持有槽的主节点都标记某个节点为 PFAIL 时,这个节点会被标记为已下线(FAIL)。此时,集群会发起故障转移流程,由从节点晋升为主节点来替代已下线的主节点继续提供服务。例如,集群中有 5 个持有槽的主节点,若其中 3 个都标记节点 X 为 PFAIL,则节点 X 被确认为 FAIL。