首页/数据/Redis 进阶速查/写保护:min-replicas-to-write
主从与哨兵51 条

写保护:min-replicas-to-write

min-replicas-to-write 与 min-replicas-max-lag 组合限制「健康副本不足时拒绝写入」,防止单主孤岛继续接收写入造成数据孤悬。

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

健康副本不足就拒写

最少副本数与最大延迟是一组写保护:当在线且确认延迟不超过阈值的从库少于要求数量时,主库直接拒绝写入。目的是避免主库在复制链断掉、自己成了孤岛时继续接收写入——那些写入一旦随主库故障消失,业务却以为已经落到了多处。

基本信息

设定项最少副本数,默认 0 表示关闭保护
最大延迟副本确认延迟上限,默认 10 秒
生效位置配置在主库侧,从库上的设置无效
判定依据从库周期性上报的复制确认及其时间间隔
拒绝报错NOREPLICAS,提示健康副本不足

典型使用场景

  • 关键写入链路:宁可写失败也不接受没有副本承载的写入
  • 计划维护:从库下线前先评估会不会触发保护,避免业务意外中断
  • 网络分区兜底:主库与从库断链时停止写入,降低脑裂后两边都写的风险
  • 作为额外保险:在哨兵或集群切换机制之外再加一道写入闸门

配置与验证

配置与验证
redis-cli CONFIG GET min-replicas-to-write min-replicas-max-lag   # 查看当前阈值
redis-cli CONFIG SET min-replicas-to-write 1                      # 至少 1 个健康从库
redis-cli CONFIG SET min-replicas-max-lag 10                      # 从库延迟不超过 10 秒
redis-cli INFO replication | grep -E 'connected_slaves|lag'       # 看健康副本数
redis-cli SET k v                                                 # 保护触发时返回副本不足错误
redis-cli CONFIG REWRITE                                          # 固化到配置文件

判定与行为

条件判定结果主库行为
健康从库数不足数量小于设定阈值写命令返回副本不足错误,读命令仍可用
某个从库延迟超标距上次收到确认超过上限秒数该从库不计入健康副本数
阈值设为 0保护关闭主库不再检查副本数量
从库恢复正常确认恢复且延迟回到阈值内写入自动恢复,无需人工干预
新从库刚建立复制尚未开始上报确认短时间内不计数,需容忍启动抖动
延迟判定用的是从库上报确认的时间间隔,粒度以秒计。上限设置得比正常抖动还小,会在链路轻微波动时误伤写入,建议先观察一段时间的延迟基线再定值。
需要更强的语义时,可以在关键写入后显式等待指定数量的副本确认(带超时)。写保护是常态闸门,单次等待是逐次约束,两者解决的不是同一个问题。
保护触发后的表现是业务写入全部失败,比数据静默丢失更显性,但仍会造成故障。必须配套明确的告警与人工处置流程,先判断是链路问题还是从库真的挂了,否则一次网络抖动会被放大成业务事故。

易错点

  • 业务用主库写状态键或心跳键:保护触发后这些写入同样失败,需要预留降级路径
  • 最大延迟设得过小:正常网络抖动就触发保护,把本可用的从库也排除在外
  • 单副本架构直接开启保护:唯一的从库做维护就会让写入整体停摆,升级前要评估维护窗口
  • 只在运行期修改不落盘:重启后保护消失,安全水位形同虚设
  • 把它当成高可用方案:它只阻止孤岛写入,主库真故障时仍需靠哨兵或集群完成切换

数据来源与参考

  • Redis 官方文档:min-replicas-to-write 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌