Redis哨兵原理,我忍你很久了( 四 )


Redis哨兵原理,我忍你很久了

文章插图
 
当 sentinel1 和 sentinel4 同时把指令发送到群里准备竞选时,sentinel2 这个时候就说我先接到谁的指令就把票投给谁 。
假如 sentinel1 发的早,那么 sentinel2 的票就会投给 sentinel1 。
Redis哨兵原理,我忍你很久了

文章插图
 
按照这样的规则一直发起投票直到有一个 sentinel 的票数为总 sentinel 数量的一半之多 。
假设说是 sentinel1 的票数满足总哨兵数量的一半之多后,sentinel1 就会当选 。这个时候就进行到了下一个阶段 。
Redis哨兵原理,我忍你很久了

文章插图
 
在上边哨兵已经选出了 sentinel1 为代表去所有的从节点找出一个作为主节点 。这个挑选主节点不是随便拿一个是有一定的规则的 。
先把不在线的干掉:
Redis哨兵原理,我忍你很久了

文章插图
 
响应慢的干掉,sentinel 会给所有的 redis 发送信息,响应速度慢的就会被干掉 。
Redis哨兵原理,我忍你很久了

文章插图
 
与原主节点断开时间最久的干掉,这里由于演示不够用了,所有新增了一个 slave5,没有任何意义哈!
Redis哨兵原理,我忍你很久了

文章插图
 
以上三个点都判断结束后还有 salve4 和 slave5,就会根据优先原则来进行筛选:
  • 首先会根据优先级,如果优先级一样在进行其他判断 。
  • 判断 offset 偏移量,判断数据同步性,假如说 slave4 的 offset 为 90,slave5 偏移量为 100 。那么哨兵就会认为 slave4 的网络是不是有问题,于是就会选 slave5 为新的主节点 。那如果说是 slave4 和 slave5 的 offset 相同呢!还有最后一个判断 。
  • 最后一步就是判断 runid 了,也就是职场中的论资排辈了,也就说根据 runid 的创建时间来判断,时间早的上位 。

Redis哨兵原理,我忍你很久了

文章插图
 
选出新的主节点后就要对所有的节点发送指令了 。
Redis哨兵原理,我忍你很久了

文章插图
 
总结
关于哨兵的所有知识点就已经说完了,本文最重要的就是哨兵的工作原理了 。
我们在简单的梳理一下其工作原理:
  • 首先进行监控,并且所有的哨兵同步信息 。
  • 哨兵向订阅里边发布信息 。
  • 故障转移:哨兵发现主节点下线→哨兵开启投票竞选负责人→由负责人推选新的主节点→新的主节点断开原主节点,并且其他的从节点连接新的主节点,原主节点上线后作为从节点连接 。
以上就是笔者对哨兵的理解,如果错误欢迎指出,以便及时改正 。

【Redis哨兵原理,我忍你很久了】


推荐阅读