1. 哨兵模式概述

Redis 哨兵(Sentinel)是 Redis 官方提供的高可用(HA)解决方案。在微服务与后端安全合规场景中,哨兵模式确保 Redis 主节点发生故障时,系统能自动完成故障转移,从而避免因缓存中断导致的业务断言失败或安全审计中断。本节从架构原理、核心组件与故障转移流程三个维度展开。

1.1 架构原理

哨兵模式基于分布式监控 + 选举 + 故障转移机制运行。一个典型的哨兵集群包含多个哨兵进程(通常为奇数个,如 3 或 5),它们彼此通信,共同监控一组 Redis 主从节点。当主节点不可达时,哨兵通过 Raft 类共识算法 选举出 Leader,由 Leader 执行故障转移,将从节点提升为新的主节点,并更新客户端配置。

架构要点:
  • 哨兵自身也是分布式进程,避免单点故障。
  • 哨兵与哨兵之间通过 __sentinel__:hello 频道交换信息。
  • 客户端通过哨兵获取当前主节点地址,实现透明切换。
Redis 哨兵模式整体架构 主节点 (Master) 从节点 (Replica 1) 从节点 (Replica 2) 从节点 (Replica 3) 哨兵集群 (Sentinel Cluster) — 3 个哨兵进程 监控 · 选举 · 故障转移 说明:哨兵集群独立于主从节点部署,通过 Pub/Sub 和内部频道实现心跳检测与共识。 客户端通过哨兵获取当前主节点地址,实现故障透明切换。

1.2 核心组件

哨兵模式由三类角色组成,每类角色承担不同的职责。下表从角色、数量、职责、安全合规关注点四个维度进行对比:

组件 推荐数量 核心职责 安全合规关注点
主节点 (Master) 1 处理读写请求;数据持久化 必须开启密码认证;审计日志记录写操作
从节点 (Replica) 1~N 复制主节点数据;提供读能力;故障时被提升 只读权限;禁止执行 FLUSHALL 等危险命令
哨兵 (Sentinel) ≥3(奇数) 监控主从状态;自动故障转移;通知客户端 独立配置认证;限制哨兵命令集;日志审计
合规提示:在金融、医疗等监管严格场景中,哨兵进程应部署在独立的安全域,并通过 TLS 加密哨兵间通信,防止中间人攻击导致错误的主节点切换。

1.3 故障转移流程

故障转移是哨兵模式的核心价值。整个流程分为主观下线 → 客观下线 → 选举 Leader → 故障转移 → 通知客户端五个阶段。以下为详细步骤:

  1. 主观下线 (SDOWN):单个哨兵发现主节点在 down-after-milliseconds 时间内未响应 PING,标记为主观下线。
  2. 客观下线 (ODOWN):该哨兵通过 sentinel is-master-down-by-addr 命令向其他哨兵询问,当超过 quorum 数量的哨兵确认主节点不可达时,标记为客观下线。
  3. 选举 Leader:哨兵集群使用 Raft 类算法选举一个 Leader 负责执行故障转移。选举基于 runid 和配置纪元(epoch)。
  4. 故障转移执行:Leader 从从节点列表中选出一个最优从节点(优先级高、复制偏移量大、runid 小),执行 SLAVEOF NO ONE 将其提升为新主节点,并让其他从节点复制新主节点。
  5. 通知客户端:哨兵通过 Pub/Sub 频道 +switch-master 发布新主节点信息,客户端订阅后更新连接。
哨兵故障转移流程 ① 主观下线 单个哨兵 PING 超时 ② 客观下线 quorum 哨兵确认 ③ 选举 Leader Raft 类共识算法 ④ 故障转移执行 选从节点 → SLAVEOF NO ONE ⑤ 通知客户端 +switch-master 频道发布 关键参数 • down-after-milliseconds:心跳超时阈值 • quorum:客观下线所需确认哨兵数 • failover-timeout:故障转移超时 • slave-priority:从节点优先级(0 表示永不提升) • parallel-syncs:同时同步新主的从节点数 安全合规:故障转移期间应记录审计日志, 包括切换时间、新旧主节点 IP、触发哨兵 ID。

1.4 故障转移中的安全合规要点

在后端安全合规场景中,故障转移不仅仅是技术切换,还涉及身份认证、命令审计、数据一致性等合规要求。以下为关键实践:

合规维度 要求 哨兵模式实现方式
身份认证 所有节点必须密码认证 主从配置 requirepass;哨兵配置 sentinel auth-pass
命令审计 记录危险命令执行日志 启用 rename-command FLUSHALL "";审计日志输出到独立文件
数据一致性 故障转移后不丢失已确认写入 使用 min-replicas-to-write + min-replicas-max-lag 保证同步
通信加密 哨兵间、哨兵与节点间 TLS 配置 tls-port、tls-cert-file、tls-key-file
常见错误码断言场景:当哨兵故障转移后,客户端仍使用旧主节点 IP 连接时,会收到 READONLY You can't write against a read only replica 错误。后端应通过哨兵 API 动态获取主节点地址,并在错误码断言中捕获此异常,触发重试逻辑。