Redis之Sentinel(哨兵)机制

一、Sentinel是什么?

Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

二、连接

对于每个被Sentinel监视的主服务器来说,Sentinel会创建两个连向主服务器的异步网络连接:

❑一个是命令连接,这个连接专门用于向主服务器发送命令,并接收命令回复。

❑另一个是订阅连接,这个连接专门用于订阅主服务器的__sentinel__:hello频道。

命令连接主要用于sentinel给服务器发送命令,订阅连接可以让各sentinel之间相互感知

三、sentinel检测下线与选举领头sentinel

  • Sentinel配置文件中的down-after-milliseconds选项指定了Sentinel判断实例进入主观下线所需的时间长度:如果一个实例在down-after-milliseconds毫秒内,连续向Sentinel返回无效回复,那么Sentinel会修改这个实例所对应的实例结构,在结构的flags属性中打开SRI_S_DOWN标识,以此来表示这个实例已经进入主观下线状态
  • 当Sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务器是否真的下线了,它会向同样监视这一主服务器的其他Sentinel进行询问,看它们是否也认为主服务器已经进入了下线状态(可以是主观下线或者客观下线)。当Sentinel从其他Sentinel那里接收到足够数量的已下线判断之后,Sentinel就会将从服务器判定为客观下线,并对主服务器执行故障转移操作
    所有在线的Sentinel都有被选为领头Sentinel的资格:最先向目标Sentinel发送设置要求的源Sentinel将成为目标Sentinel的局部领头Sentinel,而之后接收到的所有设置要求都会被目标Sentinel拒绝

四、Redis重新选主

按照以下规则过滤筛选

(1)删除处于下线或断线状态的从服务器

(2)删除列表中最近5秒内没有回复过领头sentinel的从服务器

(3)从服务器启动时,配置文件可配置优先级,按配置的优先级进行排序,找优先级最大

(4)优先级相同的,找复制偏移量最大的从服务器选为主服务器

选好主服务器之后,领头sentinel便可以向新主服务器发送slave of no one命令让其成为新主服务器

接着让其他从服务器执行slave of命令成为新主的从服务器

相关推荐
小北方城市网10 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
ohoy10 小时前
RedisTemplate 使用之Zset
java·开发语言·redis
冰冰菜的扣jio14 小时前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
阿里巴巴P8资深技术专家14 小时前
基于 Spring AI 和 Redis 向量库的智能对话系统实践
人工智能·redis·spring
oMcLin15 小时前
如何在 AlmaLinux 9 上配置并优化 Redis 集群,支持高并发的实时数据缓存与快速查询?
数据库·redis·缓存
洛阳纸贵15 小时前
Redis
数据库·redis·缓存
挺6的还17 小时前
13.持久化
redis
沙白猿17 小时前
Redis报错:A bean with that name has already been defined in class path resource
spring boot·redis·mybatis
IT 行者17 小时前
Spring Security 7 OAuth2 授权码分布式存储之Redis存储方案
redis·分布式·spring
花~盗18 小时前
redis笔记
redis