Redis哨兵模式(Sentinel)

目录

简介

定时任务

主观下线

客观下线

仲裁

哨兵模式工作原理及图例

优点

优点

实例展示


简介


        主从模式中,当主节点宕机之后,从节点是可以作为主节点顶上来继续提供服务,但是需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。

        于是,在 Redis 2.8 版本开始,引入了哨兵(Sentinel)这个概念,在主从复制的基础上,哨兵实现了自动化故障恢复

        Redis Sentinel 是分布式系统中监控 Redis 主从服务器,并提供主服务器下线时自动故障转移功能的模式。其中三个特性为:

  • 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常;
  • 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知;
  • 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。

定时任务


Sentinel 内部有 3 个定时任务,分别是:

  • 每 1 秒每个 Sentinel 对其他 Sentinel 和 Redis 节点执行 PING 操作(监控),这是一个心跳检测,是失败判定的依据。
  • 每 2 秒每个 Sentinel 通过 Master 节点的 channel 交换信息(Publish/Subscribe);
  • 每 10 秒每个 Sentinel 会对 Master 和 Slave 执行 INFO 命令,这个任务主要达到两个目的:
    • 发现 Slave 节点;
    • 确认主从关系。

主观下线


        所谓主观下线(Subjectively Down, 简称 SDOWN)指的是单个Sentinel实例对服务器做出的下线判断,即单个Sentinel认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。

        主观下线就是说如果服务器在给定的毫秒数之内,没有返回Sentinel发送的PING命令的回复,或者返回一个错误,那么Sentinel会将这个服务器标记为主观下线(SDOWN)。

客观下线


        客观下线(Objectively Down, 简称 ODOWN)指的是多个Sentinel实例在对同一个服务器做出SDOWN判断,并且通过命令互相交互之后,得出的服务器下线判断,然后开启failover。

        只有在足够数量的Sentinel都将一个服务器标记为主观下线之后,服务器才会标记为客观下线ODOWN。只有当Master被认定为客观下线时,才会发生故障迁移。 

仲裁


        仲裁指的是配置文件中的quorum选项。某个Sentinel先将Master节点标记为主观下线,然后会将这个判定通过 sentinel is-master-down-by-addr 命名询问其他Sentinel节点是否也同样认为该addrMaster节点要做主观下线。最后一个当成这一共识的Sentinel个数达到前面说的quorum设置的值时,该Master节点会被认为客观下线并进行故障转移。 

        quorum的值一般设置为Sentinel个数的二分之一加1,例如3个Sentinel 就设置为2。

哨兵模式工作原理及图例


  1. 每个Sentinel以每秒一次的频率向它所知的Master,Slave以及其他Sentinel节点发送一个PING命令;
  2. 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过配置文件 own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线
  3. 如果一个Master被标记为主观下线,那么正在监视这个Master的所有Sentinel要以每秒一次的频率确认Master是否真的进入主观下线状态;
  4. 当由足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线
  5. 如果Master处于ODOWN状态,则投票自动选出新的主节点。将剩余的从节点指定新的主节点继续进行数据复制;
  6. 在正常情况下,每个Sentinel会以每10秒一次的频率向它已知的所有Master,Slave发送INFO命令;当Master被Sentinel标记为客观下线时,Sentinel 向已下线的Master的所有Slave发送INFO命令的频率会从10秒一次该为每秒一次;
  7. 若没有足够数量的Sentinel同意Master已下线,Master的客观下线状态就会被移除。若Master重新向Sentinel的PING命令返回有效恢复,Master的主观下线状态就会被移除。

 

优点


  • 哨兵模式是基于主从模式的,所有主从模式的优点,哨兵模式都有;
  • 主从可以自动切换,系统更加健壮,可用性更高;
  • Sentinel会不断地检查你的主服务器和从服务器是否正常运作。当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或其他应用程序发送通知。

缺点


  • 主从切换需要时间,会丢失数据
  • 还是没有解决主节点写操作的压力
  • 主节点的写能力,存储能力受到单击的限制
  • 动态扩容困难复杂,对于集群,容量达到上限时在线扩容会变得很复杂

实例展示


        这是Redis哨兵模式下哨兵Sentinel监测主节点master主观下线, 其他哨兵进行仲裁,大于半数判定Master客观下线并进行failover故障转移。                  

 具体流程查看参考:模拟故障转移

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寧三一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值