Redis Cluster 故障转移

故障发现

  1. 通过ping/pong消息来实现故障发现:不需要sentinel
  2. 主观下线:某个节点认为另一个节点不可用,“偏见”
  3. 客观下线:当半数以上持有槽的主节点都标记了某节点主观下线
  • 故障链表可以维护了每个节点对其他节点的"看法",即认为主观下线与否
  • 尝试客观下线流程如下:

故障恢复

  1. 资格检查
    检查每个从节点与故障主节点的断线时间。超过cluster-node-timeout * cluster-slave-validity-factor(默认10)则取消资格。
  2. 准备选举时间
    准备选举时间,偏移量更大的从节点拥有延迟更小的选举时间,尽量保证从节点与主节点的数据一致性
  3. 选举投票
  4. 替换主节点
  • 当前从节点取消复制变为主节点(slaveof no one)
  • 执行clusterDelSlot撤销故障主节点负责的槽,并执行clusterAddSlot把这些槽分配给新的主节点
  • 向集群广播自己的pong消息,表明已经替换了故障主节点

参考资料

[1] https://coding.imooc.com/class/151.html

Author: HB
Link: http://www.huangbin.fun/Redis-Cluster-故障转移.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.