RedisNotes

第 22 章:故障排查手册

zjc 于 2026-01-22 发布

这是《Redis 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 本章按症状组织:连接失败、延迟飙升、内存告警、数据丢失、主从异常、Cluster 报错、缓存雪崩,给出排查路径和处置动作。

22.1 排查总原则

1. 先定影响面:单实例?单业务?全局?
2. 看时间线:变更、发布、活动、网络、磁盘;
3. 分层确认:客户端 -> 网络 -> Redis -> 系统 -> 架构;
4. 保留现场:INFO、SLOWLOG、CLIENT LIST、日志、指标;
5. 先恢复再根因:限流、降级、扩容、切流量。

万能命令:

PING
INFO all
SLOWLOG GET 20
CLIENT LIST
MEMORY DOCTOR
LATENCY DOCTOR
CONFIG GET *

22.2 连接失败

排查

telnet host 6379
redis-cli -h host -p 6379 ping
redis-cli -h host -p 26379 SENTINEL get-master-addr-by-name mymaster

确认:

  1. Redis 进程是否存活;
  2. bind/防火墙/安全组;
  3. 密码或 ACL;
  4. 客户端连接地址是否旧 Master;
  5. maxclients 是否达到上限;
  6. 连接池是否耗尽。

关键指标

rejected_connections
connected_clients
maxclients

处置

临时:清理空闲连接、提高 maxclients、扩客户端池
长期:排查连接泄漏、规范化连接生命周期

22.3 延迟飙升

排查顺序

1. SLOWLOG 是否有慢命令
2. 是否大 key / HGETALL / SMEMBERS / KEYS
3. Lua 是否执行过长
4. QPS 与 CPU 是否突增
5. 网络 RTT 与重传
6. RDB fork / AOF fsync
7. 客户端 GC/池等待/序列化

快速定位

SLOWLOG GET 20
LATENCY DOCTOR
INFO stats
INFO persistence
CLIENT LIST

系统:

top -H -p $(pidof redis-server)
iostat -x 1
sar -n DEV 1

应急

停止危险命令来源
限流业务
切读流量到从节点
隔离热点业务
必要时重启前先保留现场与评估数据

22.4 内存告警

INFO memory
MEMORY STATS
MEMORY DOCTOR

确认:

used_memory 是否接近 maxmemory
evicted_keys 是否增长
是否存在 OOM command not allowed
碎片率是否异常
是否 BGSAVE/COW 导致 RSS 上涨

处理:

原因 动作
缓存自然增长 扩容或调 TTL
大 key 拆分/UNLINK
僵尸 key 生命周期清理
集中过期/淘汰 随机 TTL
复制/客户端缓冲 治理慢消费者
COW 控制实例大小、加内存

22.5 数据丢失

可能原因

1. 未开启持久化且进程重启
2. 使用缓存淘汰策略,key 被驱逐
3. TTL 到期
4. 主从切换丢失异步复制数据
5. 误执行 FLUSHALL/DEL
6. 应用 bug 写错实例/DB
7. RDB/AOF 损坏或未恢复成功

确认

CONFIG GET appendonly
CONFIG GET save
CONFIG GET maxmemory-policy
INFO keyspace
INFO stats
MONITOR(短期小流量实例慎用)

检查客户端写入日志和业务请求 ID,不要只看 Redis。

恢复

有备份:新实例恢复 RDB/AOF -> 校验 -> 切流
无备份:从数据库/上游事件重建
业务必须幂等,避免重放造成重复副作用

22.6 主从复制异常

INFO replication

主节点:

connected_slaves 减少
slave offset 停滞

从节点:

master_link_status:down
master_sync_in_progress:1
master_repl_offset 停滞

常见原因:

  1. 网络抖动;
  2. backlog 太小导致全量同步;
  3. 从节点性能不足;
  4. 主节点输出缓冲超限断开;
  5. auth 配置错误;
  6. 大实例全量同步占满磁盘/网络。

处理:

修网络;
增大 repl-backlog-size;
错峰同步;
限制同时同步的 replica 数;
必要时重建从节点。

22.7 Sentinel 故障切换异常

排查:

SENTINEL masters
SENTINEL ckquorum mymaster
SENTINEL replicas mymaster

日志关注:

sdown master
odown master
+failover-state-begin
+switch-master
-failover-abort

常见问题:

问题 原因
不切主 quorum/majority 不满足
反复切主 网络分区、超时配置过小
切主后丢数据 异步复制落后
客户端仍连旧主 未接入 Sentinel 事件
新 Master 不可写 只读配置/认证异常

22.8 Cluster 报错

CROSSSLOT

原因:多 key 操作的 key 不在同一槽。

处理:hash tag 或拆分请求。

MOVED 频繁

原因:槽归属变化、客户端拓扑未刷新。

处理:使用智能客户端,开启拓扑刷新。

CLUSTERDOWN

原因:槽未全覆盖、多数节点不可用、cluster-require-full-coverage=yes

处理:

redis-cli --cluster check node:6379
redis-cli --cluster fix node:6379

迁移卡住

检查:

CLUSTER NODES
CLUSTER SLOTS
CLUSTER GETKEYSINSLOT slot count

处理:

确认源/目标节点存活
检查大 key
分批迁移
必要时 --cluster fix

22.9 缓存雪崩、击穿、穿透

详细设计见第 25 章。排查要点:

症状 常见原因
DB QPS 突增,Redis miss 突增 大量 key 同时过期或 Redis 故障
单热点 key miss 导致 DB 压力 热点 key 失效
不存在 key 大量请求 攻击/爬虫/非法 ID

应急:

接口限流
空值缓存
热点 key 逻辑过期
本地缓存兜底
DB 读写分离/扩容

22.10 事故复盘模板

影响:
  开始/结束时间、请求量、失败量、业务影响

时间线:
  告警时间、响应时间、动作时间、恢复时间

根因:
  技术根因 + 流程根因

证据:
  指标截图、SLOWLOG、配置快照、变更记录

修复:
  立即修复 + 中期治理 + 长期防线

行动项:
  负责人 + 截止时间 + 验收标准

本章小结

思考题

  1. Redis PING 正常但业务大量超时,下一步查什么?
  2. 数据“丢失”但 Redis 未重启,有哪些可能性?
  3. 如何区分 Redis 慢、网络慢、客户端慢?