DBAtlas · 数据库运维图谱

Redis / Valkey 日常运维与故障场景(Cluster 和 Sentinel)

Redis难度: 高级耗时: 5 分钟(检查)– 1 小时(reshard)

不是安装指南:这是一份按场景组织的运维手册,用于日常管理已安装的 Redis Cluster 或由 Sentinel 管理的 master/replica 架构,并在出故障时恢复(Redis 7.2、Redis 8 和 Valkey)。Cluster:健康检查、添加/移除节点、rebalance/reshard、手动 failover(FORCE 与 TAKEOVER 的区别)、替换故障节点以及 --cluster fix。Sentinel:状态和 quorum、SENTINEL FAILOVER、添加/移除节点和 SENTINEL RESET、修改配置。两者通用:内存压力以及大 key/热 key 诊断。如果不确定该做什么,先做健康检查;从备份恢复和安全加固见其他 Redis 指南。

架构: Redis Cluster(3 个以上 master + replica)或 Sentinel(1 个 master + replica + 3 个 Sentinel)

场景

  • Cluster 健康检查(--cluster check、CLUSTER INFO / NODES) — 只读:所有 slot 是否都已覆盖,各节点的配置是否一致,是否有失效(fail)节点或没有 replica 的 master。如果不确定该做什么,从这里开始。
  • 向集群添加节点(master 或 replica) — 新实例(cluster-enabled yes,空实例)已就绪:作为 master 加入集群并分配 slot,或成为某个 master 的 replica。无停机。
  • 从集群移除节点(清空 slot + del-node) — 某个 master 或 replica 要下线:将 master 的 slot 迁移到其他 master,然后把节点从集群中移除。无停机;迁移期间会出现 ASK 重定向。
  • 重新分配 slot(rebalance / reshard) — 各 master 之间的 slot 或内存不均衡、新 master 没有分到 slot,或需要把指定数量的 slot 从一个 master 迁移到另一个。
  • 手动 failover:将 replica 提升为 master(CLUSTER FAILOVER、FORCE、TAKEOVER) — 要对 master 所在服务器做维护(计划内,无数据丢失),或 master 无法访问且没有发生自动 failover(FORCE / TAKEOVER;有数据丢失风险)。
  • 替换故障 master / 节点(FORGET、新 replica、--cluster fix) — 某个节点的服务器永久丢失:如果其 replica 已成为 master,就让集群遗忘旧节点并加入新的 replica 顶替;如果它没有 replica,其 slot 会无主,需用 --cluster fix 补上(这些 slot 中的数据丢失)。
  • Sentinel 状态:master、replica、Sentinel、quorum — 只读:Sentinel 看到的 master 地址、replica、其他 Sentinel、CKQUORUM 以及最近的 failover 事件。在 Sentinel 架构中如果不确定该做什么,从这里开始。
  • 使用 Sentinel 手动 failover(SENTINEL FAILOVER) — 要对 master 所在服务器做维护:Sentinel 将最合适的 replica 提升为 master,并把其他 replica 和客户端指向新 master。中断 1–2 秒;master 运行期间执行无数据丢失。
  • 在 Sentinel 环境中添加 / 移除 / 替换节点(SENTINEL RESET) — 某个 replica 或 Sentinel 已永久移除或新加入:新 replica 通过 REPLICAOF 连接,Sentinel 中的过期记录用 SENTINEL RESET 清除。
  • 修改 quorum 和 Sentinel 配置(SENTINEL SET) — Sentinel 数量发生变化,或 failover 触发得太晚/太早:在所有 Sentinel 上修改 quorum、down-after-milliseconds、failover-timeout、parallel-syncs。
  • 内存压力:使用量、碎片、eviction 诊断 — used_memory 接近 maxmemory、出现 'OOM command not allowed' 错误、eviction 增加、RSS 比预期大,或 replica/AOF 缓冲区膨胀。诊断是只读的;解决办法另行说明。
  • 查找大 key 和热 key(--bigkeys、--memkeys、--hotkeys) — 某个节点的内存或 CPU 高于其他节点、出现延迟尖刺、DEL 耗时很长:找出最大和访问最频繁的 key,并安全地清理(UNLINK)。

开始之前

  • 管理服务器上已安装 …(随 … 一起提供,/usr/bin/…),并且可以访问… … 实例…所有集群节点的客户端端口和集群总线端口(port + 10000)… Sentinel(…)和 Redis(…)…。
  • 你掌握 … 的密码(requirepass / masterauth);步骤中会提示输入,或从环境变量 REDIS_PASS 读取。如果使用 ACL,用户需要 +@admin(cluster/sentinel 命令)和 +@keyspace 权限。
  • 已开立变更单并通知应用团队。Failover 和 slot 迁移可能使客户端出现短暂的 MOVED/ASK 重定向或连接断开;支持集群(cluster-aware)的客户端会自动跟随。
  • 新实例 … 已按 Redis Cluster 安装指南准备就绪:相同的 … 版本、cluster-enabled yes、相同的 requirepass/masterauth、空数据目录(没有旧的 nodes-.conf、RDB/AOF),防火墙已放行客户端端口和总线端口(port + 10000)。

指南阶段

  • 状态:slot 覆盖、节点和配置一致性(只读) — 检查集群(--cluster check) · 显示节点、角色和 replica 分布 · 解读结果
  • 1. 诊断:新节点是否为空且可访问? — 检查新节点和集群
  • 2. 执行:添加节点 — 将节点加入集群(--cluster add-node) · 为新 master 分配 slot(rebalance) · 为新 master 规划 replica
  • 3. 验证 — 验证集群和新节点
  • 1. 诊断:节点是否为 master,是否有 slot? — 查看要移除节点的角色和 slot
  • 2. 执行:清空 slot 并移除节点 — 将 master 的 slot 迁移到其他 master · 从集群移除节点(--cluster del-node) · 在被移除的服务器上禁用服务
  • 3. 验证 — 验证集群
  • 1. 诊断:当前分布 — 每个 master 的 slot、key 和内存
  • 2. 执行 — …均衡 slot(rebalance)…迁移 … 个 slot(reshard)…
  • 1. 诊断 — 查看 replica 的角色和 master 链接
  • 2. 执行 — 启动 failover(CLUSTER FAILOVER… FORCE… TAKEOVER…)
  • 3. 验证 — 验证新的布局
  • 1. 诊断:丢失的节点与 slot 覆盖 — 查看处于 fail 状态的节点和无主的 slot
  • 2. 执行:遗忘丢失的节点 — 让所有节点遗忘丢失的节点(CLUSTER FORGET) · 补上无主的 slot(--cluster fix) · 将新节点作为 replica 添加
  • 3. 验证与后续工作 — 验证集群
  • 状态:master、replica、Sentinel(只读) — Sentinel 看到的 master 和 quorum · 列出 replica 和其他 Sentinel · 在 Sentinel 日志中查找最近的 failover 事件
  • 1. 诊断 — 确认 quorum 和 replica 已就绪
  • 2. 执行 — 启动 failover(SENTINEL FAILOVER)
  • 3. 验证 — 验证新 master 和 replica
  • 1. 诊断 — 各 Sentinel 已知的 replica 和 Sentinel 数量
  • 2. 执行 — 将新 replica 挂到 master · 关闭被移除 replica 的服务 · 启动新 Sentinel · 关闭被移除的 Sentinel · 在所有 Sentinel 上执行 SENTINEL RESET
  • 3. 验证 — 再次检查数量和 quorum
  • 1. 诊断 — 查看每个 Sentinel 上的当前配置
  • 2. 执行 — 在所有 Sentinel 上将 … 设为 …
  • 1. 诊断:内存、上限与 eviction — 查看内存使用量和上限(INFO memory) · MEMORY DOCTOR 与 MEMORY STATS · 查看内存配置
  • 2. 解决办法 — 按情况选择解决办法
  • 1. 诊断:大 key 和热 key — 每种类型中最大的 key(--bigkeys) · 按内存排序的最大 key(--memkeys) · 热 key(--hotkeys) · 检查某个 key 的大小和类型
  • 2. 解决办法 — 安全删除大 key(UNLINK)
按您的环境打开分步计划 →