故障发现
- 通过ping/pong消息来实现故障发现:不需要sentinel
- 主观下线:某个节点认为另一个节点不可用,“偏见” 主观下线.png
- 客观下线:当半数以上持有槽的主节点都标记了某节点主观下线 客观下线.png
- 故障链表可以维护了每个节点对其他节点的"看法",即认为主观下线与否
-
尝试客观下线流程如下:
客观下线流程.png
故障恢复
- 资格检查
检查每个从节点与故障主节点的断线时间。超过cluster-node-timeout * cluster-slave-validity-factor(默认10)则取消资格。 -
准备选举时间
准备选举时间,偏移量更大的从节点拥有延迟更小的选举时间,尽量保证从节点与主节点的数据一致性 选举时间.png
- 选举投票 选举投票.png
- 替换主节点
- 当前从节点取消复制变为主节点(slaveof no one)
- 执行clusterDelSlot撤销故障主节点负责的槽,并执行clusterAddSlot把这些槽分配给新的主节点
- 向集群广播自己的pong消息,表明已经替换了故障主节点
网友评论