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

相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.10 小时前
《redis-cluster 集群部署完全手册(含扩容+缩容)》
数据库·redis·缓存
0xDevNull10 小时前
Java项目中Redis热点Key自动检测方案详细教程
java·spring boot·redis
spencer_tseng12 小时前
redis.windows.conf 2026.04.27
windows·redis
八秒记忆的老男孩15 小时前
Sentinel5P的L1B级数据预处理(BD7和BD8)【20260427】
数据库·redis·缓存
OYangxf15 小时前
基于epoll的单线程Reactor:Tinyredis的网络层实现
c++·redis
蓝眸少年CY17 小时前
(第十五篇)spring cloud之Sentinel实现熔断与限流
数据库·spring cloud·sentinel
snow@li17 小时前
数据库-Oracle:常用语法 / Oracle 核心知识技能梳理
数据库·redis·缓存
zhougl99617 小时前
Redis 防止丢数据
java·redis·mybatis
snow@li18 小时前
数据库-Redis:常用语法 / Redis 核心知识技能梳理
数据库·redis·缓存
aLTttY18 小时前
Spring Boot + Redis 实战分布式锁:从入门到精通
spring boot·redis·分布式