首页/数据/Redis 进阶速查/MASTERDOWN 与 TRYAGAIN:重试类错误
性能与排障129 条

MASTERDOWN 与 TRYAGAIN:重试类错误

复制链路异常时写入可能收到 MASTERDOWN(主库链接断开),集群操作在迁移或临时状态下可能返回 TRYAGAIN;这两类错误按可重试处理并带退避。

Redis 进阶速查数据更新于 2026-10-13

MASTERDOWN 与 TRYAGAIN 是什么

这两类是「可以重试」的错误。MASTERDOWN 出现在副本上:与主库的复制链路断开,且副本被配置为不提供旧数据时,连读请求都会直接失败;默认配置下副本会继续用旧数据提供服务。TRYAGAIN 多出现在集群的临时状态里,例如槽位迁移过程中的多键请求。处理它们的共同点是带退避的重试,而不是原地忙等。

基本信息

MASTERDOWN 含义复制链路断开,且副本不允许提供旧数据
关键配置replica-serve-stale-data,默认 yes 即默认可读旧数据
TRYAGAIN 含义集群处于临时状态,当前请求无法执行
处理策略指数退避加随机抖动,并限制最大重试次数
不可重试的错误参数错误、类型错误应直接失败
观测INFO replication 的 master_link_status、CLUSTER INFO 的状态

典型使用场景

  • 读请求成片失败:副本断链且不服务旧数据时,先确认是复制问题而非应用问题
  • 迁移窗口:槽位迁移期间出现 TRYAGAIN,退避重试即可恢复
  • 客户端加固:确认重试策略带退避与上限,避免忙等
  • 告警设计:把持续出现的重试类错误纳入告警,不要静默吞掉
  • 架构取舍:决定是否允许副本在断链时继续服务旧数据

最小示例

最小示例
redis-cli INFO replication | grep -E 'role|master_link_status|master_last_io_seconds_ago'
redis-cli CONFIG GET replica-serve-stale-data    # no 时断链会直接对读请求报 MASTERDOWN
redis-cli -c CLUSTER INFO | grep cluster_state   # 集群整体状态
redis-cli -c CLUSTER NODES | head -20            # 核对节点角色与槽位分布
redis-cli INFO stats | grep -E 'sync_full|sync_partial_err'   # 复制同步情况

错误与处置

错误出现场景处置
MASTERDOWN复制链路断开且不允许读旧数据查主库与网络,并评估旧数据策略
TRYAGAIN槽位迁移等集群临时状态退避重试,等待状态收敛
LOADING实例启动后仍在加载数据等待加载完成,客户端要能识别并重试
CLUSTERDOWN集群整体不可用先恢复多数派与槽位覆盖,再谈重试
参数或类型错误请求本身有问题不可重试,直接失败并修调用方
重试必须带退避与随机抖动并设置上限;不带退避的立即重试会形成忙等,在故障期间把服务端压力放大。
只重试幂等操作:写操作的重试要配合业务幂等设计,否则可能造成重复写入。

易错点

  • 重试不带退避:形成忙等,复制故障期间把服务端和网络一起压垮
  • 把持续的 TRYAGAIN 当瞬时抖动:背后可能是长时间迁移或节点过载,必须告警
  • 对 MASTERDOWN 无脑重试:先确认主库是否真的不可用,否则只是空转
  • 把参数错误和可重试错误混在一起重试:后者以外的重试毫无意义,还放大垃圾请求
  • 改了副本的旧数据策略却没评估可用性:断链期间读请求会直接失败

数据来源与参考

  • Redis 官方文档:复制与集群错误码
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌