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节点下线报告时间,如果与当前时间相差太久该报告会被删除 */
}
如果一个集群中超过半数的主节点认为某个主节点疑似下线,那么该主节点将会被标记为下线。