ClusterMode.3 - wyc902/redis GitHub Wiki

struct clusterNode {
   int numslaves; /* slave节点个数 */
   struct clusterNode **slaves; /* 数组存放slave节点的clusterNode结构地址 */
}

在集群模式下如果节点3是节点1的slave节点,那么在节点3的clusterState.myself.slaveof会指向节点1对应的clusterNode,而在代表节点1的clusterNode结构的numslaves会记录节点1的slave个数,clusterNode.slaves数组有一项对应节点3的clusterNode结构。

节点中的各节点会定期向其他节点发送心跳检测ping消息,如果没在规定时间内返回pong消息,发送节点就会认为响应节点疑似下线。

struct clusterNode {
   int flags; /* 如果该节点已下线,flags会被添加REDIS_NODE_PFAIL标志 */
   list *fail_reports; /* 一个链表记录了所有对该节点的下线报告 */
}

struct clusterNodeFailReport {
   struct clusterNode *node;  /* 报告目标节点下线的节点clusterNode结构地址 */
   mstime_t time;  /* 最后一次收到node节点下线报告时间,如果与当前时间相差太久该报告会被删除 */
}

如果一个集群中超过半数的主节点认为某个主节点疑似下线,那么该主节点将会被标记为下线。