2026-04-24 07:32:18
Sentinel哨兵是Redis提供的高可用性解决方案,用于解决主从复制架构中主节点宕机后需要手动切换的问题。通过自动化监控和故障转移机制,Sentinel显著提升了Redis集群的可用性。
一、Sentinel哨兵的核心功能
为避免单点误判,Sentinel采用多哨兵协同工作模式,并定义了两种下线状态:
主观下线(SDOWN)单个Sentinel在指定时间内(down-after-milliseconds配置)未收到节点响应,即认为该节点主观下线。可能因网络问题导致误判。
客观下线(ODOWN)多个Sentinel通过SENTINEL is-master-down-by-addr命令交换信息,当足够数量的Sentinel(仲裁值quorum)均认为主节点主观下线时,判定为客观下线。
仲裁值(quorum):通常设置为Sentinel数量/2 + 1(如3个Sentinel时设为2)。
配置文件准备创建3个Sentinel配置文件(如sentinel-1.conf),核心参数如下:
port 26379 # 哨兵端口bind 0.0.0.0 # 允许所有IP访问daemonize yes # 后台运行sentinel monitor mymaster 8.129.113.233 6379 2 # 监控主节点,quorum=2sentinel down-after-milliseconds mymaster 5000 # 5秒无响应视为主观下线sentinel auth-pass mymaster 123456 # Redis密码sentinel failover-timeout mymaster 30000 # 故障转移超时时间启动顺序按主节点 → 从节点 → Sentinel的顺序启动服务,确保依赖关系正确。
启动命令
./redis-server /path/to/sentinel-1.conf --sentinel./redis-server /path/to/sentinel-2.conf --sentinel./redis-server /path/to/sentinel-3.conf --sentinel日志目录提前创建/var/log/redis目录用于存储哨兵日志。
日志关键阶段:
在application.yml中配置哨兵集群地址,替代单节点配置:
spring: redis: sentinel: master: mymaster # 主节点名称(与Sentinel配置一致) nodes: 8.129.113.233:26379,8.129.113.233:26380,8.129.113.233:26381 password: 123456 # Redis密码优势:
优点:
高可用性:主从自动切换,服务中断时间极短。
去中心化:无单点故障,哨兵集群协同工作。
配置简单:通过少量参数即可实现复杂的高可用逻辑。
缺点:
主节点性能受限:所有写操作集中于主节点,无法横向扩展。
集群规模限制:Sentinel适合中小规模集群,大规模场景需考虑Redis Cluster。
脑裂风险:网络分区可能导致多个主节点并存(需通过min-slaves-to-write等参数缓解)。
通过合理配置Sentinel哨兵,可显著提升Redis集群的可用性,但需根据业务场景权衡性能与一致性需求。对于超大规模集群,建议进一步评估Redis Cluster方案。