Redis - 集群模式总结

集群模式下,拥有16384个slot,只有当所有slot都有指派,集群才处于上线状态,出于性能考虑,每个节点都会记录所有slot的指派状态。

重新分片:将任意数量已经指派给源节点的slot指派给新的节点。

节点接受命令请求的过程:先检查键所在的slot是否由自己处理,如果不是,返回一个MOVED错误,指引client转向正确节点;如果键正在被迁移到其他节点,返回一个ASK错误,指引client转向迁移后的节点,client发送ASKING指令,新节点设置REDIS_ASKING标识(一次性标识),破例执行关于正在迁移的键的命令,如果不发送ASKING,返回MOVED命令,指向源节点。

计算键属于哪个slot的方法:CRC16(key) & 16383

故障转移步骤:1.选择从节点 2.执行SLAVEOF no one命令,成为新的主节点 3.撤销已下线节点的slot指派,转移给自己 4.广播一条PONG消息,更新其他节点中的信息 5.开始接受自己负责的slot相关的命令,故障转移完成。

新的主节点选举模式:基于Raft算法的领头选举(抢占式,半数以上投票,配置纪元,每个纪元最多进行一次选举),与sentinel领头选举模式基本相同。

集群节点通过发送和接受消息通信,常见的有MEET,PING,PONG,PUBLISH,FAIL,消息头中包含发送者的自身信息,接收者可以知道发送者的状态、角色和slot指派信息是否发生变化。

故障检测:接受PING消息的节点没有在规定时间内返回PONG,将被发送者标记为疑似下线状态(PFAIL),如果半数以上节点将某主节点标记为疑似下线状态,则该节点被标记为下线状态,标记下线状态的节点会广播一条关于该节点的FAIL消息。

从以上几点,判断redis主从与集群的关系 -> 集群同样包含许多主从节点,但每个主节点负责不同的slot,即有分片。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章