1132 字
6 分钟
Redis 的哨兵机制是什么?
  1. 1Redis 系列导读:知识地图、必会主线与复习顺序
  2. 2Redis 中常见的数据类型有哪些?
  3. 3Redis 通常应用于哪些场景?
  4. 4Redis为什么这么快?
  5. 5Redis 常用的过期时间、删除 Key 命令有哪些?
  6. 6Redis 的过期 Key 是如何被删除的?
  7. 7Redis 内存满了怎么办?有哪些淘汰策略?
  8. 8缓存穿透、击穿、雪崩的区别与解决方案
  9. 9Redis 如何保证缓存与数据库的数据一致性?
  10. 10Redis 的持久化机制有哪些?
  11. 11Redis 主从复制的完整流程是什么?
  12. 12Redis 的哨兵机制是什么?本文
  13. 13Redis Cluster 模式与 Sentinel 模式的区别是什么?
  14. 14Redis 支持事务吗?如何实现?
  15. 15Redis 中如何实现分布式锁?
  16. 16Redis 的 Lua 脚本功能是什么?如何使用?
  17. 17如何解决 Redis 中的热点 Key 问题?
  18. 18Redis BigKey 有什么危害?如何发现和治理?
  19. 19为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  20. 20Redis 的 LRU 和 LFU 有什么区别?
  21. 21Redis 数据类型和底层编码有什么区别?
  22. 22Redis 中跳表的实现原理是什么?
  23. 23Redis 的 ZSet 为什么使用跳表,而不是平衡树?
  24. 24Redis 的 RDB 快照如何生成?为什么会有写时复制?
  25. 25Redis 的 AOF 刷盘和重写有什么区别?
  26. 26Redis 断线后如何通过 PSYNC 部分重同步?
  27. 27Redis 主从切换为什么会丢数据?WAIT 能解决吗?
  28. 28Redis 集群会出现脑裂问题吗?
  29. 29Redisson 看门狗(watch dog)机制了解吗?
  30. 30Redis Cluster:哈希槽、Gossip 与故障转移
  31. 31Redis Pipeline 为什么能提高吞吐?能保证原子性吗?
  32. 32Redis 的 SCAN 和 KEYS 有什么区别?
  33. 33Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
  34. 34Redis 和 MySQL 有什么区别?
  35. 35Redis 为什么使用 SDS,而不是 C 字符串?
  36. 36Redis 的哈希表如何处理冲突和渐进式 rehash?
  37. 37Redis Cluster 的 MOVED 和 ASK 重定向有什么区别?
  38. 38Redis Cluster 为什么会报 CROSSSLOT?Hash Tag 怎么用?
  39. 39Redis 如何实现限流?固定窗口和滑动窗口怎么选?
  40. 40Redis Stream 如何保证消息消费?ACK 和 PEL 是什么?
  41. 41Redis 删除数据后为什么内存不下降?如何理解内存碎片?

Redis 的哨兵机制(Sentinel)主要解决一个问题:Redis 的主节点挂了,怎样自动选出新的主节点,让服务尽快恢复?

一、为什么需要哨兵机制?#

假设你的系统使用 Redis 主从架构:

  • Master(主节点):负责写入数据,也可以处理读取请求。
  • Slave(从节点):复制主节点的数据,通常用于分担读请求。

11

问题来了:如果 Master 突然宕机了呢?

  1. 从节点还在,但是它们不会自动决定谁来接管主节点。
  2. 如果没有人工干预,服务可能一直无法正常写入。
  3. 如果需要人工切换,恢复速度就会受到影响。

所以,我们需要 Redis Sentinel(哨兵)。

二、哨兵机制是什么?#

Redis Sentinel 是 Redis 提供的高可用组件,可以监控 Redis 节点、判断主节点是否故障、自动进行故障转移,并通知客户端新的主节点地址。

它主要有四个功能:

功能作用
监控定期检查主节点和从节点是否正常
自动故障转移主节点故障后,选出一个从节点升级为主节点
通知将新的主节点信息提供给客户端
配置提供帮助客户端发现当前主节点的地址

三、主节点挂了,哨兵怎么处理?#

这是面试最重要的部分。

第一步:监控主节点

哨兵定期向 Master 发送 PING 等检测请求,判断它是否正常响应。

第二步:判断主节点是否客观下线

一个哨兵认为主节点不可达,称为主观下线(SDOWN);多个哨兵通过协商,达到配置的法定数量(quorum)后,可以将其判定为客观下线(ODOWN)。

第三步:选举领导哨兵并执行故障转移

哨兵之间会选出一个领导哨兵,由它挑选合适的从节点,将其提升为新的 Master。

第四步:让其他从节点跟随新主节点

其他从节点改为复制新的 Master,客户端也通过哨兵获取新的主节点地址,恢复正常访问。

你可以把它理解成:发现故障 → 多方确认 → 选举负责人 → 更换主节点 → 通知客户端。

4

四、为什么通常要部署 3 个哨兵?#

因为哨兵需要相互通信、协商故障状态,并选举领导哨兵。

例如,部署 3 个哨兵:

  • Sentinel 1
  • Sentinel 2
  • Sentinel 3

如果其中一个哨兵宕机,另外两个仍然可以通信、完成协商和选举(具体还要满足相应的 quorum 和选举条件)。

如果只部署一个哨兵,它自己宕机后就没有其他哨兵可以接管判断和故障转移。

注意:3 个哨兵不是绝对要求,但通常会部署奇数个,例如 3 个;quorum 是判断客观下线所需的同意数量,不完全等同于领导哨兵选举所需的多数票。

五、哨兵机制有什么局限?#

哨兵能实现高可用,但不代表数据绝对不丢失。

例如,Master 收到了写请求,但数据还没有复制到 Slave,Master 就宕机了。哨兵将某个 Slave 提升为新 Master 后,这部分尚未复制的数据就可能丢失。

另外,哨兵本身不负责数据分片。如果需要将数据分散到多个主节点上,通常要考虑 Redis Cluster 等方案。

六、面试时怎么回答?#

Redis 哨兵机制是 Redis 提供的高可用方案,主要用于监控 Redis 节点,并在主节点发生故障时自动进行故障转移。

它主要有四个功能:监控、自动故障转移、通知和配置提供。

当主节点发生故障时,哨兵首先通过主观下线和客观下线机制判断故障,然后选举领导哨兵,由领导哨兵挑选一个合适的从节点,将其提升为新的主节点,其他从节点再跟随新主节点,客户端也可以获取新的主节点地址。

实际部署中通常会配置多个哨兵,避免单个哨兵故障导致无法进行故障转移。

不过,哨兵主要解决的是高可用问题,不能保证数据绝对不丢失,也不负责数据分片。

记忆重点:哨兵 = 监控 + 故障判断 + 自动切主 + 通知客户端。

Redis 的哨兵机制是什么?
https://blog.xqcherry.top/posts/interview/redis/redis-sentinel/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0