一、前言:为什么需要哨兵集群?
在 Redis 主从架构中,主节点一旦宕机,整个系统将无法写入。
如果依赖人工干预(如手动执行 SLAVEOF NO ONE),恢复时间可能长达数分钟,严重影响业务可用性。
Redis Sentinel(哨兵) 就是为解决这一问题而设计的——它是一个轻量级、分布式、自动化的高可用解决方案。
而单个哨兵存在单点故障风险,因此生产环境必须部署 哨兵集群。
本文将带你:
✅ 看懂哨兵集群的整体结构
✅ 理解它的三大核心作用
✅ 掌握最小部署建议与工作流程
二、哨兵集群整体结构图
一个典型的 Redis 哨兵集群包含两部分:
1. Redis 数据节点(主从架构)
- 1 个主节点(Master):负责读写
- N 个从节点(Slave):只读,用于数据冗余和读扩展
2. Sentinel 哨兵节点(监控集群)
- 至少 3 个 Sentinel 实例:相互协作,共同决策
✅ 关键特点:
- Sentinel 不存储业务数据,只存储集群元信息
- Sentinel 默认端口:26379
- 所有 Sentinel 节点对等(peer-to-peer),无中心节点
三、哨兵集群的三大核心作用
作用 1️⃣:持续监控(Monitoring)
- 每个 Sentinel 定期向 主节点、从节点 发送 PING 命令
- 若节点在 down-after-milliseconds 时间内无响应,则标记为 主观下线(SDOWN)
# sentinel.conf 示例
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 30000 # 30秒无响应即 SDOWN
作用 2️⃣:自动故障转移(Automatic Failover)
当主节点被判定为 客观下线(ODOWN) 后,哨兵集群会:
- 向新主发送 SLAVEOF NO ONE
- 向其他从节点发送 SLAVEOF <new_master>
⏱️ 整个过程通常在 10~30 秒内完成,无需人工介入!
作用 3️⃣:配置提供者(Configuration Provider)
- 客户端不直接连接 Redis 主节点,而是先连接 Sentinel
- 通过命令获取当前主节点地址:
SENTINEL get-master-addr-by-name mymaster
- 或订阅事件(如 +switch-master)实现动态感知主节点变更
✅ 这使得应用在主从切换后无需重启,自动路由到新主!
四、哨兵集群如何达成共识?(ODOWN 判定)
单个 Sentinel 认为主节点宕机 ≠ 真的宕机(可能是网络抖动)。
哨兵集群通过 quorum 机制 避免误判:
sentinel monitor mymaster 192.168.1.100 6379 2
# ↑
# quorum = 2
- 主观下线(SDOWN):任一 Sentinel 认为节点不可达
- 客观下线(ODOWN):至少 quorum 个 Sentinel 同意 SDOWN
🔑 注意:
- quorum 不是多数派,而是 ODOWN 的门槛值
- 但 Leader 选举仍需多数派(> N/2) 才能成功
| 3 | 2 | 1 |
| 5 | 3 | 2 |
✅ 生产建议:部署 3 个 Sentinel 节点,quorum=2
五、客户端如何使用哨兵集群?
Java(Jedis 示例)
Set<String> sentinels = Set.of(
"192.168.1.11:26379",
"192.168.1.12:26379",
"192.168.1.13:26379"
);
// 创建哨兵连接池
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
try (Jedis jedis = pool.getResource()) {
jedis.set("hello", "world"); // 自动写入当前主节点
System.out.println(jedis.get("hello"));
}
Spring Boot 配置
spring:
redis:
sentinel:
master: mymaster
nodes:
– 192.168.1.11:26379
– 192.168.1.12:26379
– 192.168.1.13:26379
✅ 客户端会自动发现主节点变化,实现无缝切换!
六、部署最佳实践
✅ 必须遵守
✅ 推荐配置
# sentinel.conf
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
❌ 常见错误
- 只部署 1 个 Sentinel → 失去高可用意义
- quorum 设置过大(如 3 节点设 quorum=3)→ 无法达成 ODOWN
- 忘记开放 26379 端口 → Sentinel 无法通信
七、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

