数据库与存储 · 高级

Redis Sentinel 高可用

从主从数据基线、Sentinel 多数授权到客户端发现和故障演练,明确异步复制与新主接写后的恢复边界。

Redis监控告警高可用

场景目标

完成 Redis 主副本与至少三个独立故障域 Sentinel 的拓扑核对,验证多数授权、客户端发现和持久化恢复记录;在受控测试范围完成一次主节点不可用演练,报告实际客户端恢复时间、测试写入缺口与重试结果,并验证旧主按新主副本身份恢复冗余。

环境要求

使用已确认受支持的 Redis 与 Sentinel 配套版本,示例为现代 Redis 的 ROLE、INFO 和 SENTINEL 命令,ACL、TLS 及客户端行为按实际版本核对。准备至少一主一副本及三个分布在独立故障域的 Sentinel,确认实例地址能被 Sentinel 与客户端真实访问,NAT 和容器映射需单独验证。需要最小监测权限、受控管理身份、支持 Sentinel 的客户端和测试业务键空间;预留复制缓冲、持久化、全量同步及写时复制所需内存与磁盘。保存配置和已验证的备份恢复记录,窗口内具备暂停业务写入与隔离旧主的能力。预计 300 分钟覆盖首批接入和一次演练,不含采购、全量重同步、完整备份恢复与长周期负载观察。

参考架构 · 非实时拓扑

客户端发现、复制与 Sentinel 协调架构

客户端向 Sentinel 查询当前主节点后直接访问 Redis,数据通过主副本复制传递;下线判定、故障转移授权和旧主写入约束需要分别验证。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

客户端发现、复制与 Sentinel 协调架构:组件关系图客户端向 Sentinel 查询当前主节点后直接访问 Redis,数据通过主副本复制传递;下线判定、故障转移授权和旧主写入约束需要分别验证。 Sentinel 客户端 → Sentinel 实例组:查询当前主地址;Sentinel 客户端 → Redis 当前主节点:直接读写;Redis 当前主节点 → Redis 副本 A:异步复制;Redis 当前主节点 → Redis 副本 B:异步复制;Sentinel 实例组 → Redis 当前主节点:监测角色与可达性;Sentinel 实例组 → Redis 副本 A:获授权后提升;旧主写入约束 → Redis 当前主节点:限制旧主接写;Prometheus → Sentinel 实例组:采集协调状态;Grafana → Prometheus:查询时间线。箭头说明见下方流向解读。
逻辑参考图,Sentinel 组表示分布在独立故障域的多个实例;布局不是物理共置关系,也不表示已经完成切换或零丢失验证。

Sentinel 客户端

入口 / 来源

配置多个 Sentinel 地址与准确的主节点名称,发现后的数据地址必须可达;对超时写入需要幂等或业务核对。

全部组件职责 8 个组件
Sentinel 客户端
配置多个 Sentinel 地址与准确的主节点名称,发现后的数据地址必须可达;对超时写入需要幂等或业务核对。
Redis 当前主节点
承接业务请求并向副本复制,主角色发生变化后客户端需要重新发现;不能继续用旧地址判断权威。工具介绍 Redis 当前主节点
Redis 副本 A
根据复制健康、优先级和实际资格参与候选选择,提升后需观察其他副本重配置与应用恢复。工具介绍 Redis 副本 A
Sentinel 实例组
参考使用跨故障域的三个实例。quorum 用于客观下线认定,发起故障转移还需多数授权;本图只示意部分监测与控制连线。工具介绍 Sentinel 实例组
旧主写入约束
按预案约束旧主的直连和旧连接写入,必要时评估副本数量限制写入等取舍;不是 Sentinel 自带的通用强制隔离保证。
Redis 副本 B
表示另一可用数据副本,应按真实故障域部署;全量同步可能额外占用内存、磁盘和网络。工具介绍 Redis 副本 B
Prometheus
通过版本兼容的指标端点观测 Redis 和 Sentinel,并保留选主事件与资源时间线,不参与多数投票。工具介绍 Prometheus
Grafana
结合复制链路、持久化错误、客户端重连与事件时间,区分采集失败、单副本故障和多数不可达。工具介绍 Grafana
流向解读 9 条连接
  1. 1

    Sentinel 客户端 Sentinel 实例组

    控制 / 管理 · 查询当前主地址

    Sentinel 返回当前主节点地址;它不是转发业务命令的数据代理。

  2. 2

    Sentinel 客户端 Redis 当前主节点

    数据 / 请求 · 直接读写

    客户端使用发现结果直接连接 Redis,角色变化后需要刷新旧连接池。

  3. 3

    Redis 当前主节点 Redis 副本 A

    数据 / 请求 · 异步复制

    数据从当前主节点复制到副本 A,已确认写入仍可能尚未送达。

  4. 4

    Redis 当前主节点 Redis 副本 B

    数据 / 请求 · 异步复制

    数据复制到副本 B;副本数量增加不自动形成强一致提交多数。

  5. 5

    Sentinel 实例组 Redis 当前主节点

    观测 / 查询 · 监测角色与可达性

    Sentinel 监测数据节点并交换视图,客观下线和多数授权是不同条件。

  6. 6

    Sentinel 实例组 Redis 副本 A

    控制 / 管理 · 获授权后提升

    只有具备故障转移授权和合格候选时才执行提升;此边不表示当前副本已经成为主节点。

  7. 7

    旧主写入约束 Redis 当前主节点

    控制 / 管理 · 限制旧主接写

    故障转移时防止旧主在隔离分区继续承接业务,需要实际验证所有写入口。

  8. 8

    Prometheus Sentinel 实例组

    观测 / 查询 · 采集协调状态

    通过适配指标端点观察多数可达性和角色事件,不把采集失联等同于完成选主。

  9. 9

    Grafana Prometheus

    观测 / 查询 · 查询时间线

    查看切换相关指标,并与 Sentinel 原始事件和客户端记录对照。

从架构到实施

  1. 01

    先确认多数与数据风险

    核对主副本、持久化和全部客户端,绘制真实故障域;分别验证 quorum、授权多数和广告地址可达性。

  2. 02

    把客户端纳入切换架构

    验证名称发现、分离认证、旧连接回收及非幂等请求的重试边界,再接入复制、容量与协调状态告警。

  3. 03

    按事务证据恢复单主与副本

    在受控范围记录故障到客户端恢复时间与测试序列结果,新主接写后保持其权威,旧主核对后作为副本恢复。

故障域与操作边界

Sentinel 多数不是数据多数

quorum 认定下线,多数授权允许故障转移;两者都不能保证每笔已确认写入已在被提升副本上保存。

发现服务不能阻止所有旧主直连

网络分区中的旧客户端可能继续使用旧连接,需单独落实写入约束及业务重试策略,不能宣称 Sentinel 天然避免一切双写。

恢复冗余不意味着自动回切

旧主回归时先保留分歧证据,按新主重同步;不能用旧 RDB/AOF 覆盖新主或为还原机器角色直接切回。

架构依据与版本核对 1 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

方案说明

适用架构

适用于非 Redis Cluster 的单主多副本环境,由分布在独立故障域的 Sentinel 实例监测并协调故障转移。客户端通过 Sentinel 名称和地址发现当前主节点,Prometheus 与 Grafana 观察复制、持久化、容量和切换事件。

不适用边界

Sentinel 不提供分片,也不把异步复制变为强一致系统。quorum 用于认定客观下线,执行故障转移还需要获得 Sentinel 多数授权;三实例通常采用 quorum=2,但仍需按实际故障域和多数可达性验证。已确认写入也可能尚未到达副本,不能承诺零丢失。

全局验收

所有 Sentinel 对目标名称与可达拓扑的视图一致,客户端可发现新主并按业务语义重连;演练保存发现、授权、提升、重配置和应用恢复时间。新主一旦接收写入即保持其权威,旧主先隔离再作为新主副本恢复,任何不一致都有明确的数据核对与处置记录。

配套知识

官方参考

工具编排

3 个关联工具
  1. Redis复制、持久化与 Sentinel提供主副本复制及 Sentinel 故障转移;异步复制存在数据缺口边界,恢复必须保持新主权威。
  2. Prometheus复制与切换信号采集通过已验证端点采集实例角色、复制、持久化、内存和 Sentinel 事件,支撑告警与演练时间线。
  3. Grafana拓扑与容量验收看板展示主副本角色、复制链路、客户端错误、持久化和内存趋势,关联故障转移时间范围。

实施步骤

共 7 步
  1. 01

    保存主副本与持久化基线

    核对当前主节点、所有副本、业务用途和直连客户端,记录复制偏移、链路状态、数据规模、内存余量及持久化结果,明确数据来自持久业务还是可重建缓存。以下命令在已通过受控认证连接的 redis-cli 会话中只读执行,分别保存每台实例的地址和角色;不在命令行明文传递密码,不使用生产全量键扫描建立基线。

    ROLE
    INFO replication
    INFO persistence
    验证标准

    实例角色与资产清单一致,副本链路和持久化状态可解释,备份记录包含实际恢复与抽样校验;已列出所有应用连接方式。复制偏移与采样时间一起记录,不把某次接近作为永久无损保证。

    停止与回退

    此步骤不更改角色或配置,若发现未知主节点、持久化错误或数据来源不清,停止后续切换准备。保存只读证据并确认当前权威,先处理复制和恢复问题再接入 Sentinel。

    返回步骤起点
  2. 02

    确定故障域与写入边界

    把 Sentinel 和 Redis 节点映射到实际主机、机架或可用区,计算失去一个故障域后能否维持多数 Sentinel 可达。区分 quorum 的下线判定与多数授权,统一主节点名称和可达地址,排查 NAT、端口映射及 DNS 差异。结合业务数据语义评估异步复制风险、客户端超时重试和旧主隔离手段,若采用副本数量限制写入等策略,先验证对可用性的影响。

    验证标准

    故障域图与实际部署一致,单域故障后多数授权条件有明确结论;应用和 Sentinel 能访问广告地址。业务方确认潜在数据缺口和重复请求处理方式,旧主所有写入口均有可执行的隔离方法。

    停止与回退

    多数可达性或地址条件不满足时暂缓启用故障转移,保留现有受控主副本并先调整部署。此阶段不主动隔离主节点;未完成风险和客户端确认前,不用强制故障转移验证猜测。

    返回步骤起点
  3. 03

    逐个校验 Sentinel 视图

    按固定目标名称逐个配置 Sentinel,核对认证、TLS、监测参数、判定时间和配置文件可持久写回,避免重启后丢失拓扑状态。全部实例上线后分别读取主节点、副本和其他 Sentinel 的视图;下面命令在 Sentinel 会话执行,mymaster 应替换为本环境名称。CKQUORUM 用于检查当前仲裁和故障转移授权条件,返回正常仍不等于已经完成真实切换验收。

    SENTINEL MASTER mymaster
    SENTINEL REPLICAS mymaster
    SENTINEL CKQUORUM mymaster
    验证标准

    各 Sentinel 识别的目标名称、主副本地址和同伴符合预期,当前 CKQUORUM 检查通过;无持续认证或连接错误。配置持久化与重启后的恢复行为在测试环境验证,实例间没有未解释的拓扑分歧。

    停止与回退

    视图分歧时暂停业务迁移和故障演练,先修正地址、认证或配置问题。尚未发生角色变化时可逐项撤回新配置;若已出现选主或提升,则先核对权威和写入情况,不同时重置全部 Sentinel。

    返回步骤起点
  4. 04

    验证客户端发现与请求语义

    在测试客户端配置多个 Sentinel 地址、准确主节点名称及分别适用于 Sentinel 和数据节点的认证信息,确认发现后的地址实际可达。设置连接、命令超时与退避策略,核对连接池如何丢弃旧连接;对写请求明确超时后结果未知时的幂等或查询补偿方式,不能把所有命令都自动重试。先迁移非核心业务实例,保存错误率、重连时间和测试键行为,再逐批放行。

    验证标准

    客户端经任一可用 Sentinel 能发现同一主节点,测试读写和认证正常;旧连接失效后的更新策略有实测结果。非幂等请求的重试边界清楚,首批迁移没有新增未解释的错误或重复业务效果。

    停止与回退

    客户端配置失败时恢复已验证的连接方案,但必须重新确认其指向当前权威主节点。发生角色切换后不能恢复硬编码旧主地址;无法确认主节点或请求结果时暂停相关写入并先核对。

    返回步骤起点
  5. 05

    接入复制、容量与选主告警

    接入与实际版本兼容的 Redis 和 Sentinel 指标端点,观察角色、复制链路、同步状态、内存、淘汰、持久化错误与客户端错误率,并持续记录 Sentinel 下线、选举和提升事件。告警区分采集失联、单副本故障、多数不可达和业务写入异常,附带主节点名称及当前拓扑入口。为全量同步和持久化预留资源,测试告警送达并统一各节点时钟,准备完整切换时间线。

    验证标准

    每台数据节点与 Sentinel 的关键状态可追踪,指标角色与原生命令一致;多数不可达和复制中断有明确升级路径。测试通知包含当前拓扑与处理入口,资源阈值能够覆盖同步或持久化额外开销。

    停止与回退

    采集产生异常负载时撤回对应目标与频率,恢复原监控并保留切换事件日志。告警规则错误只回退新增规则,不通过调整实例角色消除告警;关键证据缺失时暂停后续演练。

    返回步骤起点
  6. 06

    演练主节点故障与客户端恢复

    在批准窗口和可控业务范围内,记录测试键状态与带唯一标识的写入序列,再按预案模拟当前主节点不可用,并确保旧主无法继续接收应用写入。观察主观下线、客观下线、多数授权、候选提升、其他副本重配置及客户端重连,逐项记录时间。故障持续时间受窗口和资源阈值约束,核对写请求成功、失败和结果未知三类状态,不把测试键存在直接等同于无数据丢失。

    验证标准

    当前拓扑只允许一个权威主节点接写,客户端发现新主并在约定时限内恢复;测试序列的重复、缺口和未知结果均有统计。旧主隔离有效,告警和选主事件能对应到完整演练时间线。

    停止与回退

    新主尚未接写时先核对角色与数据状态再按预案撤销测试。新主已接写后保持其权威,旧主继续隔离;异常时暂停写入并调查差异,不能切回旧主或用旧 RDB/AOF 覆盖新主数据。

    返回步骤起点
  7. 07

    恢复旧主为副本并交接结果

    恢复故障节点连通前确认其不会被旧客户端直连写入,读取其数据和角色证据,按当前 Sentinel 权威视图使其作为新主副本重新同步;必要时先保留分歧数据副本供核对,再按已验证流程重建。观察同步对内存、磁盘和网络的影响,冗余稳定后再解除临时限制。归档实际恢复时间、测试数据缺口、客户端行为和配置版本,后续切回原节点应作为新的受控切换。

    验证标准

    旧主已作为新主副本完成约定同步,所有 Sentinel 与客户端对当前主节点认识一致;内存、持久化和复制无新增未解释异常。验收记录如实列出数据与重试边界,后续观察有负责人和时间。

    停止与回退

    旧主重同步失败或数据分歧未解释时继续隔离并暂停其候选资格,保持新主权威及现有可用副本。不得为恢复原拓扑而覆盖新主数据;需要恢复历史数据时先在隔离环境核对并决定补偿方式。

    返回步骤起点

DOUYA OPS ECOSYSTEM

体验豆芽自研工具与场景能力

部分场景提供体验环境,用于功能验证、测试和技术交流。