Redis Sentinel 详解

Redis Sentinel 详解

1. 什么是 Redis Sentinel?有什么用?

Redis Sentinel(哨兵) 是 Redis 官方提供的高可用性解决方案,主要用于监控、通知和自动故障转移。当 Redis 主节点(master)发生故障时,Sentinel 能够自动选举新的 master,并通知客户端以保证 Redis 集群的高可用性。

Redis Sentinel 主要提供以下功能:

  1. 监控(Monitoring): 定期检查 Redis 主从(master-slave)实例的可用性。
  2. 通知(Notification): 当某个实例出现故障时,Sentinel 会向系统管理员或其他应用程序发送通知。
  3. 自动故障转移(Automatic Failover): 发现主节点不可用后,自动从从节点(slave)中选举新的 master,并让其他 slave 重新复制新的 master。
  4. 配置管理(Configuration Provider): 客户端可以连接 Sentinel,获取当前可用的 Redis master 地址,减少手动维护的复杂度。

2. Sentinel 如何检测节点是否下线?

Sentinel 通过定期发送 PING 命令检测 Redis 节点的状态:

  • 如果某个 Redis 节点长时间没有响应 PING(超时),Sentinel 认为它可能下线,并标记为主观下线(Subjectively Down,简称 SDOWN)
  • 如果多个 Sentinel 对该节点都判断为主观下线,并且达成一致意见,Sentinel 便标记其为客观下线(Objectively Down,简称 ODOWN),然后进行故障转移。
检测机制

Sentinel 通过 sentinel.conf 配置文件中的 down-after-milliseconds 参数设置超时时间。例如:

sentinel down-after-milliseconds mymaster 5000

表示 Sentinel 如果 5 秒内未收到 PONG 响应,就认为该节点主观下线(SDOWN)


3. 主观下线(SDOWN)与客观下线(ODOWN)的区别

  • 主观下线(SDOWN,Subjectively Down)
    • 单个 Sentinel 认为某个 Redis 节点不可用,仅基于自己 PING 的响应情况得出结论。
    • 由于网络问题,可能是 Sentinel 误判,因此不会立即触发故障转移。
  • 客观下线(ODOWN,Objectively Down)
    • 需要多个 Sentinel 经过投票一致认为某个 Redis 节点确实不可用,才会标记其为 ODOWN。
    • 只有当 Sentinel 认定 master 为 ODOWN 后,才会触发故障转移。

4. Sentinel 是如何实现故障转移的?

当 Sentinel 发现 Redis 主节点 ODOWN 后,故障转移(failover)流程如下:

  1. 选举新的 master
    • Sentinel 选出一个可用的 slave 作为新的 master。
    • 其他 slave 重新配置,开始同步新的 master。
  2. 更新 Sentinel 配置
    • Sentinel 更新集群配置,并通知其他 Sentinel、客户端新的 master 地址。
  3. 通知客户端
    • 客户端可以从 Sentinel 处获取新的 master 地址,继续正常工作。

5. 为什么建议部署多个 Sentinel 节点(哨兵集群)?

部署多个 Sentinel 主要是为了提高可靠性,避免单点故障,并增强故障转移的准确性:

  1. 避免单点故障:单个 Sentinel 可能宕机,导致无法监测 Redis 状态,因此需要多个 Sentinel 互相监控。
  2. 提高判断准确性:多个 Sentinel 通过投票机制决定 master 是否真的 ODOWN,避免误判(如网络抖动)。
  3. 支持故障转移:Sentinel 需要多个节点达成共识后才能执行 failover,以保证一致性。

一般建议至少部署 3 个 Sentinel,以保证投票机制能够生效。


6. Sentinel 如何选择出新的 master(选举机制)?

当 Redis master 被判定 ODOWN 后,Sentinel 需要从 slave 里选出新的 master,遵循以下原则:

  1. 优先级(Priority):优先选择 slave-priority 值最低的从节点(值越小,优先级越高)。
  2. 复制进度(Replication Offset):如果多个 slave 的优先级相同,则选择数据同步最完整(复制偏移量最大的)slave。
  3. 运行时长(Run ID):如果前两个条件仍然无法区分,Sentinel 选择 runid 字典序最小的 slave。
  4. 可用性:确保 slave 可用,并且能够成功被转换为 master。

一旦选出新的 master,Sentinel 会执行 SLAVEOF NO ONE 命令,将其转换为 master,并让其他 slave 重新同步该 master。


7. 如何从 Sentinel 集群中选择出 Leader?

当多个 Sentinel 发现 master ODOWN 后,需要选举一个 Sentinel 作为Leader,负责执行故障转移。Leader 选举流程如下:

  1. Sentinel 通过 Raft 算法类似的 Leader 选举机制 进行投票:
    • 每个 Sentinel 都可以提议自己为 Leader
    • 其他 Sentinel 如果尚未投票,可能会投票给它。
    • 如果某个 Sentinel 获得超过一半的投票,它就被选为 Leader。
  2. Leader 负责执行故障转移
    • 选举出新的 master,并通知其他 Sentinel 进行更新。

如果 Leader 在 failover 过程中宕机,其他 Sentinel 会重新选举新的 Leader,继续执行 failover。


8. Sentinel 可以防止脑裂(Split-Brain)吗?

部分情况下,Sentinel 机制可以缓解脑裂问题,但无法完全避免。例如:

  1. 避免单机多主(Multiple Masters)
    • Sentinel 通过投票机制,确保只有一个 master 存在,防止多个 Sentinel 误判后产生多个 master。
  2. 可能的脑裂场景
    • 如果 master 因网络分区短暂失联,Sentinel 可能会选出新的 master,但原 master 仍在运行,导致出现两个 master(脑裂)。
    • 解决方案:
      • 采用 min-slaves-to-writemin-slaves-max-lag 配置,确保 master 只有在足够多 slave 连接时才允许写入。
      • 使用 Redis Cluster,避免 Sentinel 方案中的潜在脑裂问题。

总结

问题关键点
Sentinel 作用监控 Redis 状态,通知变更,执行故障转移
主观下线 vs 客观下线SDOWN 由单个 Sentinel 认定,ODOWN 需要多个 Sentinel 认定
故障转移流程发现 ODOWN → 选出新的 master → 更新配置并通知客户端
Sentinel 集群优势避免单点故障,提高可靠性,确保故障转移准确性
新 master 选举机制slave-priority、复制进度、运行时间长短等进行筛选
Sentinel Leader 选举采用 Raft 类似算法,得票最多的 Sentinel 负责 failover
是否防止脑裂只能缓解,不能完全避免,推荐 Redis Cluster 方案

如果你的 Redis 需要高可用性,Sentinel 是一个不错的选择,但要谨慎处理脑裂问题网络分区情况。

拓展阅读

1. 什么是网络分区(Network Partition)?

网络分区(Network Partition) 指的是 由于网络故障,导致集群中部分节点之间无法通信。网络分区不会直接让节点宕机,而是让它们变成孤立的“孤岛”,互相无法感知对方的状态。

在 Redis Sentinel 方案中,网络分区可能导致:

  • Sentinel 误判 master 失联,触发故障转移(但原 master 仍然运行)。
  • 多个 Sentinel 彼此之间无法沟通,导致 split-brain(脑裂)问题。

2. 什么是脑裂(Split-Brain)?

脑裂(Split-Brain) 指的是由于网络分区,导致多个 master 节点并存,这会引发数据不一致、数据丢失等严重问题。

场景示例:

  1. 网络分区发生
    • Redis 主节点(master)与大部分 Sentinel 失去联系(但仍然存活)。
    • 这时,Sentinel 误认为 master 已宕机,触发故障转移,选举新的 master。
  2. 原 master 继续提供服务
    • 由于原 master 仍然存活,客户端可能仍然在写入它的数据,而新的 master 也在接受写入。
    • 这样,就会产生两个 master,各自接受不同的数据。
  3. 网络恢复后
    • 原 master 重新连接 Sentinel,但 Sentinel 发现新的 master 已经存在。
    • 由于两个 master 的数据不同,Redis 无法自动合并数据,可能导致部分数据丢失。

3. 脑裂发生后如何解决?

脑裂发生后,通常需要手动干预来恢复一致性。常见的解决方案包括:

方法 1:配置 slave 强制下线(min-slaves-to-write & min-slaves-max-lag)

在 Redis 主从架构中,可以通过 min-slaves-to-writemin-slaves-max-lag 参数确保 master 只在有足够 slave 存活时才允许写入:

min-slaves-to-write 1
min-slaves-max-lag 10
  • 作用:如果 master 发现自己没有足够的 slave,或者 slave 的同步滞后超过 10 秒,它就会拒绝写入。
  • 效果:如果 master 因网络分区变成孤立节点,它将自动进入只读模式,避免脑裂。

方法 2:手动干预

如果脑裂已经发生,可以执行以下步骤:

  1. 检测当前集群状态

    • 运行 INFO replication 查看 master 和 slave 角色。
    • 运行 SENTINEL master <master-name> 检查 Sentinel 认为的 master 是谁。
  2. 强制废弃旧 master

    • 如果原 master 变成了孤立的 master(split-brain 发生),可以执行:

      redis-cli -h old-master -p 6379 SLAVEOF new-master-host new-master-port
      
    • 这样,原 master 重新作为 slave,从新 master 同步数据。


方法 3:使用 Redis Cluster

Redis Sentinel 主要解决的是“高可用性”问题,但无法彻底解决脑裂问题
Redis Cluster 采用了Gossip 协议数据分片机制,能够更好地防止脑裂:

  • 多数派写入(Quorum Writes):只有当大多数节点存活时,Redis Cluster 才允许写入。
  • 自动数据迁移:当某个 master 失联后,集群会选举新的 master,并重新分配数据。

因此,对于分布式环境(多数据中心),Redis Cluster 比 Sentinel 更能避免脑裂问题


4. 总结

问题解决方案
网络分区导致的误判通过 down-after-milliseconds 设置合理的 Sentinel 宕机超时时间
防止脑裂通过 min-slaves-to-write & min-slaves-max-lag 限制 master 行为
脑裂已发生重新配置旧 master 为新 master 的 slave,并让它重新同步数据
最佳方案采用 Redis Cluster,利用多数派选举防止 split-brain

Redis Sentinel 适用于小型架构,但如果要保证高可用性和一致性,Redis Cluster 更可靠。

Redis Sentinel 使用场景?

Redis Sentinel 仅适用于主从(Master-Slave)模式,不能用于 Redis Cluster。它的主要目的是监控主从架构中的 master 和 slave,自动进行故障转移(failover),保证高可用性。


Sentinel 适用的 Redis 部署模式

主从(Master-Slave)模式

  • 主节点(master)负责读写,多个从节点(slave)负责读取并复制主节点数据。
  • Sentinel 负责监控 master 是否存活,并在故障时将某个 slave 选举为新的 master

哨兵模式(Sentinel Cluster)

  • 多个 Sentinel 组成哨兵集群,监控 Redis 主从实例,通过投票决定故障转移。

Sentinel 不能用于哪些场景?

Redis Cluster(分片集群模式)

  • Redis Cluster 本身已经支持高可用,采用数据分片和 Gossip 协议,不需要 Sentinel。
  • 在 Redis Cluster 中,节点间通过投票机制进行主节点选举,而 Sentinel 不能管理 Cluster。

单机 Redis

  • 没有 slave 的情况下,Sentinel 无法执行故障转移,它的主要作用是监控主从结构。
  • 如果只有一个 Redis 实例(单点),可以考虑使用 Keepalived + VIP 来做高可用

如何选择 Sentinel 还是 Redis Cluster?
特性Redis Sentinel(主从模式)Redis Cluster(分片模式)
数据分片❌ 不支持✅ 支持
自动故障转移✅ 由 Sentinel 负责✅ 由 Cluster 本身负责
客户端连接方式需通过 Sentinel 获取 master直接连接 Redis Cluster
适用于场景读多写少,单机难以承受压力高并发、大数据量、分片存储
数据一致性只保证主从一致性,不防止脑裂采用多数派选举,防止脑裂

结论
  • 如果你使用 Redis 主从模式 并希望实现高可用性,那么 Sentinel 是一个不错的选择
  • 如果你希望数据分片、扩展性更强,并且 不想依赖外部高可用组件,应该选择 Redis Cluster

简单理解
小型业务,主从读多写少 → 用 Sentinel
高并发、大规模数据 → 用 Redis Cluster

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI日报 - 2025年3月25日

&#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | Nebula&#xff08;Google Gemini 2.0 Pro&#xff09;破解复杂数学谜题 编码与推理能力再上新台阶 ▎&#x1f4bc; 商业动向 | Sesame AI开源10亿参数语音模型CSM-1B 语音AI进入普惠时代 …

AI医疗革命:英伟达GTC 2025医疗健康与生命科学会议全分析

AI医疗革命:英伟达GTC 2025医疗健康与生命科学会议全分析 一、GTC 2025:AI 医疗的算力与生态双突破 1.1 黄仁勋演讲核心:从训练到推理的代际跨越 在科技界瞩目的英伟达 GTC 2025 大会上,英伟达 CEO 黄仁勋的主题演讲成为全场焦点,为 AI 医疗领域带来了极具变革性的消息。…

【机器学习/大模型/八股文 面经 (一)】

1. PPO算法中使用GAE的好处以及参数γ和λ的作用是什么? 参考答案: GAE(Generalized Advantage Estimation) 的优势在于通过指数加权多步TD误差,平衡优势估计的偏差与方差,提升策略优化的稳定性。γ(折扣因子):控制未来奖励的衰减程度,值越大表示更关注长期收益。λ…

03 Python 基础:数据类型、运算符与流程控制解析

文章目录 一、数据类型 内置的六大类数字类型整数类型 int浮点数 float布尔 bool字符串 str 变量命名 二、数字类型的相互转换显式类型的转换整数&#xff0c;浮点数&#xff0c;复数 之间的显式转换 隐式类型的转换 三、标识符算术运算符比较运算符逻辑运算符位运算符赋值运算…

视频知识库初步设想

将视频字幕提取出来作为知识库来源定位,下一步设想:把视频上的图片信息也精简出来作为定位。 下面是测试例子: 入参: {"model":"deepseek-ai/DeepSeek-R1-Distill-Llama-8B","messages":[{"role":"system","cont…

数据库原理13

1.关系模式设计不当引起的问题&#xff1a;数据冗余&#xff1b;更新异常&#xff1b;插入异常&#xff1b;删除异常 2.外码可以是单个属性&#xff0c;也可以是属性组 3.动态SQL是SQL标准提供的一种语句运行机制 4.若一个模式分解保持函数依赖&#xff0c;则该分解一定具有…

初级:异常处理面试题深度解析

一、引言 在Java开发中&#xff0c;异常处理是确保程序健壮性和稳定性的重要机制。面试官通过相关问题考察候选人对异常处理的理解和运用能力&#xff0c;以及在实际开发中处理异常的经验。本文将深入剖析常见的异常处理面试题&#xff0c;结合实际开发场景&#xff0c;帮助读…

Apache Spark - 用于大规模数据分析的统一引擎

Apache Spark - 用于大规模数据分析的统一引擎 下载运行示例和 Shell使用 Spark Connect 在 Anywhere 上运行 Spark 客户端应用程序 在集群上启动从这里去哪里使用 Spark Shell 进行交互式分析基本有关数据集作的更多信息缓存 自包含应用程序从这里去哪里 Apache Spark 是用于大…

餐饮管理系统的设计与实现(代码+数据库+LW)

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…

【C#】Winform调用NModbus实现Modbus TCP 主站通讯

一、前言 Modbus是一种串行通信协议&#xff0c;是工业领域全球最流行的协议之一。 1.1 环境 系统&#xff1a;Win11 工具&#xff1a;Visual Studio 2022 .Net 版本&#xff1a;.Net Framework4.6.0 依赖库&#xff1a;NModbus 3.0.81 1.2 协议类型 Modbus RTU&#xff1a;一…

【leetcode题解】贪心算法

目录 贪心算法 柠檬水找零 将数组和减半的最少操作次数 最大数 摆动序列 最长递增子序列 递增的三元子序列 最长连续递增序列 买卖股票的最佳时机 买卖股票的最佳时机 II K 次取反后最大化的数组和 按身高排序 优势洗牌 最长回文串 增减字符串匹配 分发饼干 最…

Langchain4J框架相关面试题

以下是关于Langchain4J框架的面试题目及答案 ### Langchain4J基础概念类 1. **Langchain4J框架是什么&#xff1f;它的核心功能有哪些&#xff1f;** Langchain4J是一个用于构建语言模型应用的Java框架&#xff0c;它为开发者提供了一套简洁高效的API&#xff0c;使得在Jav…

Apache Doris

Apache Doris介绍 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场…

VLAN间通信

目录 第一步&#xff1a;配vlan 第二步&#xff1a;配置核心vlanif,MAC地址信息。 第三步&#xff1a;ospf协议 三层交换机&#xff08;汇聚层&#xff09;: 对于交换机、路由器、防火墙等网络设备而言&#xff0c;接口类型一般存在两种&#xff1a;二层接口&#xff0c;三…

LeetCode热题100精讲——Top2:字母异位词分组【哈希】

你好&#xff0c;我是安然无虞。 文章目录 题目背景字母异位词分组C解法Python解法 题目背景 如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解: 蓝桥杯算法竞赛系列第九章巧解哈希题&#xff0c;用这3种数据类型足矣 字母异位词分组 题目链接&am…

基于python+django的图书借阅网站-图书借阅管理系统源码+运行步骤

该系统是基于pythondjango开发的在线图书借阅管理系统。系统适合场景&#xff1a;大学生、课程作业、系统设计、毕业设计。 演示地址 前台地址&#xff1a; http://book.gitapp.cn 后台地址&#xff1a;http://book.gitapp.cn/#/admin 后台管理帐号&#xff1a; 用户名&…

uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用

通过uniapp集成保利威直播、点播SDK来开发小程序/APP的视频直播能力&#xff0c;在实际开发中可能会遇到的疑问和解决方案&#xff0c;下篇。更多疑问请咨询19924784795。 1.ios不能后台挂起uniapp插件 ios端使用后台音频播放和画中画功能&#xff0c;没有在 manifest.json 进…

数据库三级填空+应用题(1)

填空 35【答案】TOP 3 WITH TIES 【解析】希望选出商品数量最多的前3类商品&#xff0c;并获得相应的商品类别和数量。with ties一般是和Top 、 order by相结合使用,表示包括与最后一行order by后面的参数取值并列的结果。 36在SQL Server 2008中&#xff0c;每个数据页可存储8…

前端(vue)学习笔记(CLASS 5):自定义指令插槽路由

1、自定义指令 内置指令&#xff1a;内部提供的&#xff0c;每个指令都有自己各自独立的功能 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 全局注册-语法 例如&#xff0c;当页面加载时&#xff0c;让元素获得焦点 Vue.…

【redis】事务详解,相关命令multi、exec、discard 与 watch 的原理

文章目录 什么是事务原子性一致性持久性隔离性 优势与 MySQL 对比用处 事务相关命令开启事务——MULTI执行事务——EXEC放弃当前事务——DISCARD监控某个 key——WATCH作用场景使用方法实现原理 事务总结 什么是事务 MySQL 事务&#xff1a; 原子性&#xff1a;把多个操作&am…