部署指南 · 数据库与存储

待环境验证

Redis Sentinel 上线检查与切换演练

检查 Sentinel 发现、认证、复制和客户端重连,在隔离环境演练主节点故障,验证拓扑收敛及可接受的数据恢复边界。

Redis监控告警高可用
阅读导引 · 理解后再操作

这篇知识解决什么问题

上线检查要把当前可连接、自动故障检测可用、应用能够恢复和数据结果可解释分成独立门槛。本篇帮助整理每轮演练前后的身份与时间线,区别协调面切换和业务恢复,并在旧主回归、新主已经接写时保留明确的数据权威与停止边界。

一轮故障对应一条可复核时间线

每轮都应从已确认的稳定拓扑开始,先记录角色与复制状态,再关联获批故障、协调事件和应用恢复。不同故障交叠后难以解释恢复来源,控制面切换时间也不等于业务恢复时间。报告应保留测量来源与未观察的环节,不预先填写固定中断或零丢失结果。

恢复单主之后还要核对业务效果

发现服务收敛只是恢复过程的一部分,客户端需要刷新连接并正确处理超时结果,副本也需要重新建立健康复制。用已有获准测试记录的请求身份核对缺口与重复,旧主恢复后先检查当前角色和数据历史。角色重新一致不能自动消除已经发生的业务副作用。

进入文章正文
关联架构图解8 个组件 · 点击展开

参考图帮助将演练观测点分别放在 Sentinel 协调、主副本复制、客户端直连和旧主写入约束上。布局不代表真实故障注入范围;本图未展示具体防火墙规则、客户端重试算法或所有持久化恢复路径。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

客户端发现、复制与 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 原始事件和客户端记录对照。

故障域与操作边界

Sentinel 多数不是数据多数

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

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

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

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

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

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

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

适用范围与演练前提

本文是「Redis Sentinel 高可用」场景的上线检查单,针对已有主从复制、使用 Sentinel 感知客户端的非分片 Redis。先在隔离测试环境完成演练,再依据本环境变更流程安排业务窗口。准备实例清单、主组名、故障域说明、备份恢复方法、业务探针和停止标准。本文未宣称任何演练已经执行或达到可用性指标。

保存上线前的状态

在每个 Redis 节点记录角色、复制链路与持久化状态。大写字符串均为占位符;端口、认证与 TLS 选项需要按部署替换,不把密码写入共享命令记录。

redis-cli -h REPLACE_WITH_REDIS_HOST -p 6379 INFO replication
redis-cli -h REPLACE_WITH_REDIS_HOST -p 6379 INFO persistence

检查副本 master_link_status、同步是否进行中,以及在同一复制历史下的 offset 差距趋势。确认角色符合拓扑、持久化错误已处理,并留出重新同步的资源余量。不能仅通过 PING 判断候选可接管业务;INFO 字段定义见文末官方资料。

验证 Sentinel 发现和仲裁条件

在每个 Sentinel 上核对同一主组的视图:

redis-cli -h REPLACE_WITH_SENTINEL_HOST -p 26379 SENTINEL MASTER REPLACE_WITH_MASTER_NAME
redis-cli -h REPLACE_WITH_SENTINEL_HOST -p 26379 SENTINEL REPLICAS REPLACE_WITH_MASTER_NAME
redis-cli -h REPLACE_WITH_SENTINEL_HOST -p 26379 SENTINEL CKQUORUM REPLACE_WITH_MASTER_NAME

对比主地址、已发现副本、Sentinel 数量和异常标志。CKQUORUM 用于检查当前视图能否满足 quorum 与多数授权条件;单节点返回正常仍需结合其他节点的视图和实际网络路径。主组名拼写、通告地址或认证有差异时,先修正再继续。

从应用侧完成接入检查

验证每类应用使用多个 Sentinel 地址,能够连接发现得到的候选节点,并能在断连后重建连接池。准备独立测试键空间及请求标识,在演练窗口使用经授权的业务探针记录写后读、超时和重试行为。上线记录中分别填写 Sentinel 发现耗时与应用恢复耗时,避免只观察控制平面的切换事件。

对长连接服务、短任务和后台定时任务分别采样;不同客户端库的重试行为可能不同。提前确定测试数据的清理责任和保留期限,让探针结果可以复核,又不混入业务统计。

每次注入一种可恢复故障

按测试计划依次验证单个 Sentinel 暂停、主 Redis 进程停止及受控网络隔离,每轮先恢复稳定基线再进行下一轮。网络隔离需要明确影响方向和撤销方法,避免同时切断管理通道。观察候选提升、各 Sentinel 主地址收敛、应用重连及旧主恢复后的角色。

手动 SENTINEL FAILOVER 会强制发起切换,不等价于验证自动故障检测和多数授权路径;若单独使用它测试操作链路,应在报告中明确这一限制,不能以此替代网络分区测试。

验收、停止与恢复

验收需确认业务入口指向唯一有效写主,副本重新跟随、告警恢复且测试记录可以核对。检查超时重试是否导致重复业务效果,并填写实际数据偏差和中断时间。旧主回来后先确认其复制角色与追赶状态,不立即重新指向它。

若出现双侧持续写入、复制无法恢复、客户端固定旧地址或超出预设中断窗口,停止后续故障注入,撤销当前网络或进程故障并保持受控写入口。已经发生新写入后,回切必须先处理数据同步与分歧;恢复旧配置并不自动恢复数据一致性。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 各 Sentinel 都能响应,但对同一主组返回不同地址、成员或异常标志;上线检查只有单个节点的成功截图。

    只读核对
    读取各成员对同一主组的视图及当前仲裁检查结果,核对采样时间、地址通告、已知副本与配置版本。
    如何判读
    单点响应不足以说明全组可用;先排除采样期间变化,再检查成员发现和连通差异,不能据一张截图批准上线。
  2. 演练记录显示主角色已变化,某类应用仍超时或重试,另一些应用已经恢复;网络侧没有统一说明恢复范围。

    只读核对
    查看各客户端类型的现有连接目标、发现及重试日志,对照候选地址可达性的既有测试材料和切换事件时间。
    如何判读
    应独立分析发现、数据连接和连接池恢复;不能以一种客户端恢复推断后台任务、长连接和其他库全部通过。
  3. 旧主重新出现后业务读写暂时正常,但复制仍在恢复,测试记录出现重复或缺口,下一轮故障已经被安排。

    只读核对
    读取当前主副本角色、复制和持久化状态,对照已有测试请求序列及副本恢复趋势,不注入新故障或重放请求。
    如何判读
    恢复基线可能尚未成立,数据偏差也仍需解释;应先交接未收敛项,不能仅凭业务暂时可访问继续下一轮。
常见误区与判断边界 2 项

手动强制切换不是自动检测的替身

手动发起切换可覆盖部分操作链路,却不能代表系统通过真实故障判定和多数授权完成相同过程。测试报告应清楚标识触发方式与未覆盖路径。本文只读取既有结果,不追加故障;网络分区测试需有独立范围、撤销方法和授权。

旧主回来就恢复原连接配置

原节点重新可达不说明它仍拥有最新权威数据,新主接收的写入可能尚未在旧节点可见。直接回指旧地址会破坏已经建立的恢复秩序。应先保存两侧历史与应用证据,维持受控写入口,再由负责人决定重同步或新的计划切换。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保存每轮演练的批准范围、故障类型、起止时间及基线角色,说明是真实故障注入、手动操作还是仅检查现有状态。
  • 记录所有 Sentinel 的主组视图与副本身份,附数据节点复制及持久化状态,注明每份输出的采样时间和未取得项。
  • 对每类客户端分别保存发现、连接目标与恢复记录,关联获准测试请求的超时、重复和完成结果,避免只报告控制面耗时。
  • 交接旧主回归角色、复制收敛情况和数据偏差核对结果,记录停止条件是否触发及谁负责批准下一轮或正式上线。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。