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命令成为新主的从服务器

相关推荐
无心水1 分钟前
【分布式利器:限流】3、微服务分布式限流:Sentinel集群限流+Resilience4j使用教程
分布式·微服务·架构·sentinel·分布式限流·resilience4j·分布式利器
梁bk2 分钟前
Redis 多级缓存架构学习笔记
redis·缓存·架构
q***18844 小时前
Ubuntu上安装、使用Redis的详细教程
redis·ubuntu·bootstrap
q***65694 小时前
Windows环境下安装Redis并设置Redis开机自启
数据库·windows·redis
q***47435 小时前
Windows 和 Linux 系统下,如何查看 Redis 的版本号?
linux·windows·redis
q***96585 小时前
Windows版Redis本地后台启动
数据库·windows·redis
利刃大大5 小时前
【c++中间件】redis介绍 && redis-plus-plus库使用
c++·redis·中间件
q***81645 小时前
【Redis】centos7 systemctl 启动 Redis 失败
数据库·redis·缓存
m***567215 小时前
Win10下安装 Redis
数据库·redis·缓存
q***783717 小时前
Spring Boot 3.X:Unable to connect to Redis错误记录
spring boot·redis·后端