美文网首页
redis的哨兵

redis的哨兵

作者: lionel880 | 来源:发表于2019-12-18 18:33 被阅读0次

    sentinal 本质上是运行在特殊模式下的redis
    一个典型的哨兵部署如下


    image.png

    我们使用哨兵结构进行部署的主要目的是为了高可用,当主机宕机时,可以自动切换,下图是一个典型的故障转移过程


    image.png

    一、哨兵模式的redis有何特殊?

    • Sentinel 状态中的服务器,会有一个masters字典
      masters字典记录了所有被Sentinel监视的主服务器相关信息。字典的key是主服务名字,字典的value则是主服务器对应的实例结构(包括主服务器,从服务器,或者另外一个Sentinel)
      这个字典初始化,就是sentinel的配置


      image.png

    此外还有slave字典和sentinel字典,但这个是后续更新信息的

    二、sentinel获得主、从、其他哨兵服务器信息?

    sentinel和服务器创建2个连接,一个是订阅,一个是命令。增加一个命令主要是为了防止,订阅频道时,消息丢失的情况

    • Sentinel如何获得服务器的信息
      1.获得主服务器信息
      Sentinel每隔10s通过命令连接向主服务发info命令,info命令获得相关从服务器的信息,包括tp,端口等
    • 2.获得从服务器信息,因为之前已经拿到了主服务器的info信息,里面包含的从的信息,sentinel再向从服务器建立2个连接,自然就获得了从服务器的信息,更新到自己的slave字典中
    • 获得其他sentinel的信息
      sentinel怎么知道其他的哨兵,是通过暴露自己的方式,让其他哨兵感知到的,sentinel会向主从服务器都向sentinel:hellp频道发布消息,消息内容会包含sentinel自身信息和监控的主机信息,那么其他的sentinel
      通过订阅这个频道,可以知道其他sentinel的信息。从而使得监视同一个主服务器的多个Sentinel可以走动发现对方。发现后就可以互相创建命令连接,最终跟新自身的sentinel字典

    三、高可用的方案

    检测主观下线
    sentinel每隔1s向其他服务器发送ping,如果超过down-after-nukkuseconds,就会被判定为主观下线
    何谓主观,就是仅仅考虑自己的想法,这里指就是自身这台sentinel判定不通过,认为你下线了。

    检测客观下线
    当sentinel判定一台服务器主观下线后,会去向其他的sentinel询问,如果反馈达到一定数量,则被判定为客观下线。这个数量quorum是一开始配置好的。

    选举sentinel的leader
    sentinel选举是基于raft算法选出leader的。
    参考文档:https://www.jianshu.com/writer#/notebooks/28197258/notes/57839517/preview

    故障转移
    当选出sentinel的leader后,那一台sentinel就可以执行故障转移高可用

    • 1.在从服务器里,挑选一个从服务器,转换为新的主
      挑选的依据主要是根据存活,优先级,最大偏移量,运行id,依次选下去。
      发送命令 slaveof no one后,从就会变成主,再次期间,sentinel每隔1s向服务器发送info命令直到info 返回的role是master了,就确认从已经正确切换成主

    • 2.让其他的从,变成新的主的从
      向其他的从发送新的slaveof 命令

    • 3.让已下线的主设置为新的主服务的从,如果旧主重新上线就变成了新主的从
      保存在自身结构中,这样下掉的主回来就变成新的从了

    相关文章

      网友评论

          本文标题:redis的哨兵

          本文链接:https://www.haomeiwen.com/subject/wriynctx.html