Redis哨兵模式

  • 什么是哨兵模式

        哨兵模式是Redis高可用的解决方案,使用Sentinel(哨兵)监控Redis集群中全部节点的运行状态,当主节点服务宕机后,会从当前主节点下的从节点中选一个节点作为新的主节点,继续为用户提供服务。当原主节点重新启动后,不会重新作为主节点运行,只能作为从节点运行。

  • 哨兵模式的优点

        相对于主从模式,哨兵模式更加高可用,因为主从模式中,当主节点宕机后,就无法继续提供服务了,需要手动启动,但是哨兵模式可以选出新的主节点,继续提供服务。

  • 哨兵模式示意图

        哨兵模式可以使用单独的哨兵也可以使用多个哨兵,单哨兵模式如图:

        使用一个哨兵,检测多个Redis节点的运行状态。当主节点宕机后,哨兵选出新的主节点即可。但是这种模式有缺点,就是哨兵服务自己宕机,那么就没有办法检测Redis节点了,所以可以引入多个哨兵,如图:

        在多哨兵模式下,每个哨兵除了检测所有节点的运行状态外,还要检测其他哨兵的运行状态。

  • 哨兵检测方式

        哨兵通过心跳机制,实现对节点和其他哨兵的状态检测,每秒钟向集群中所有节点发送ping命令。

  • 判定节点下线方法

        当有一个哨兵发现某个节点没有在规定时间内做出相应,则认为该节点下线,被称为主观下线。

        当其他哨兵也检测到该节点下线,并且达到了一定数量(具体由哨兵的监控配置决定,比如超过一半),那么就标记该节点为客观下线。

        如果该节点是主节点,那么就要发起投票,选出新的主节点。

  • 选举新的主节点

        哨兵选举主节点是一个很严谨的过程,主要是由一下因素决定。

        1、节点与主节点连接时长

        如果从节点与主节点断开的时长超过down-after-milliseconds的十倍外加主节点宕机时长,那么就认为该节点不适合做主节点。

        2、优先级

        通过 slave-priority 配置项(redis.conf),可以给不同的从库设置不同优先级,优先级高的优先成为master。

        3、复制偏移量

        选择数据偏移量差距最小的,即slave_repl_offset与 master_repl_offset进度差距,差距越小数据与主节点差的越少。

        4、运行ID(run id)

        运行ID越小,说明运行时间越早,所以选run id小的从节点。

  • 消息通知

        更新主节点后,通知其他从节点,所有从节点重新slave of到新的主节点上,重新建立runID和slave_repl_offset,此后写数据时都写入到新的主节点上。

  • 哨兵集群通信方式

        使用redis的pub/sub 订阅能力实现哨兵间通信 和 slave 发现。

        哨兵之间可以相互通信,主要归功于 Redis 的 pub/sub 发布/订阅机制。哨兵与 master 建立通信之后,可以利用 master 提供发布/订阅机制发布自己的IP、port等信息,master 有一个 sentinel:hello 的专用通道,用于哨兵之间发布和订阅消息。哨兵们都可以通过该通道发布自己的Name、IP、Port消息,同时订阅其他哨兵发布的Name、IP、Port消息。互相发现之后建立起了连接,后续的消息通信就可以直接进行了。

  • 哨兵集群通信方式

        sentinel向master发送 INFO 命令,master返回与之关联的slave 列表,sentinel 根据 master 返回的 slave 列表,逐个与 salve 建立连接,并且根据这个连接持续监控。

  • 哨兵与客户端进行事件通知

        依旧是通过 pub/sub 机制,发布不同事件,让客户端在这里订阅消息。客户端可以订阅哨兵的消息,哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过程中的不同关键事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值