LOADING 错误的成因
实例启动时载入 RDB 或 AOF 期间处于 LOADING 状态,除少数管理命令外的请求都会收到 LOADING 类错误;集群切换与全量同步后的窗口同样可能出现。这本身是设计行为而不是故障,问题出在上游没为这段短暂窗口做准备:重试间隔设置不当会把窗口内的压力放大,健康检查不识别加载状态则会把错误直接透传给业务。
基本信息
| 出现时机 | 启动加载 RDB/AOF 期间,以及同步相关窗口 |
|---|---|
| 服务端状态 | INFO persistence 中 loading 字段为 1 |
| 客户端处理 | 识别为可重试错误,按退避策略重试 |
| 上游配合 | readiness 检查在加载完成前不放行 |
| 观察字段 | loading 与 rdb_*、aof_* 系列加载相关字段 |
典型使用场景
- 滚动重启:重启后先确认加载完成,再把实例接入流量
- 集群切换:新主升维后可能有加载或同步窗口,流量要收敛
- 客户端治理:把 LOADING 与真实故障区分开,避免误触发熔断
- 大实例恢复:加载时间长,重试策略要覆盖整个窗口
- 告警定阈:加载窗口内的错误单独归类,不混入业务错误率
判断与处置
判断与处置
redis-cli INFO persistence | grep -E 'loading|rdb_|aof_' # 加载状态与最近持久化结果
redis-cli PING # 加载期间可能返回 LOADING 错误
redis-cli INFO server | grep uptime_in_seconds # 结合运行时长判断是否刚启动
# 客户端侧:识别 LOADING 后指数退避重试,避免窗口内打满无效请求错误类型区分
| 错误 | 含义 | 处置方向 |
|---|---|---|
| LOADING | 实例正在加载数据 | 退避重试,同时拦住上游流量 |
| READONLY | 当前节点是副本 | 检查连接目标的角色是否正确 |
| CLUSTERDOWN | 集群不可用 | 按集群预案处置,重试意义有限 |
| 连接被拒绝 | 连接已达上限或进程未就绪 | 先确认实例状态与 maxclients |
把重试与超时策略配好,LOADING 窗口是可控的短暂阶段;关键是把这段时间的流量拦在入口,而不是让业务请求在窗口里反复失败。
大实例加载时间长,若被上游误判为服务故障,可能触发不必要的切换或重启,让恢复过程从头再来,问题被显著放大。