repl-backlog-size过小会导致从节点断连重连时无法增量同步而触发全量同步。应按"写入吞吐×断连容忍时间"估算并调大,且需确保repl_backlog_active=1及合理设置repl-backlog-ttl。repl-backlog-size 设得太小,从节点断连后立刻触发全量同步Redis 主从复制中,主节点靠 repl-backlog 这个环形缓冲区暂存最近的写命令。从节点断连重连时,如果它想续传的偏移量(master_repl_offset - slave_repl_offset)已超出缓冲区范围,主节点就无法提供增量数据,只能走 PSYNC fullresync ------也就是全量同步。这是最耗资源的操作,尤其在大实例上可能卡主节点几秒到几分钟。典型现象:INFO replication 里频繁看到 master_repl_offset 和 slave_repl_offset 差值巨大,或日志反复出现 Partial resynchronization not accepted。默认值是 1mb,对多数生产环境完全不够用------哪怕每秒只写 10KB,100 秒就溢出估算公式:缓冲区大小 ≈ 写入吞吐 × 断连容忍时间。例如主节点 QPS 5k、平均命令大小 200B → 每秒约 1MB 写入,若要求断连 5 分钟内不丢增量,则至少要 300mb设置后无需重启,执行 CONFIG SET repl-backlog-size 536870912 即可(单位字节),但注意:新缓冲区生效前旧数据会丢失,所以最好在低峰期操作调大 repl-backlog-size 后内存没涨?检查是否启用了 repl-backlogrepl-backlog-size 生效的前提是主节点有从节点连接过(哪怕当前断开)。Redis 不会在没有主从关系时预分配这个缓冲区------这是常被忽略的"假失效"原因。执行 INFO replication,确认输出中有 repl_backlog_active:1。如果是 0,说明缓冲区根本没启用,调大配置也没用只要有一个从节点成功完成过一次同步(哪怕之后断开),repl_backlog_active 就会变成 1,缓冲区才真正分配如果主节点长期无从节点,又想提前预留缓冲区,可以临时起一个从节点连上再断开,触发初始化repl-backlog-size 和 repl-backlog-ttl 的配合逻辑缓冲区不是永久存在的。repl-backlog-ttl 控制它在最后一个从节点断开后存活多久(默认 1 小时)。超时后缓冲区释放,下次有从节点连上来再重建------这时如果新从节点需要的偏移量恰好落在刚释放的区间,照样触发全量同步。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
三维频道2 小时前
工业级三维扫描实测:汽车灯具复杂结构件的全尺寸 3D 测量方案分析wangyangyangcumt2 小时前
银河麒麟V10 SP3离线安装Nginx1.21.5全记录tongyiixiaohuang2 小时前
基于轻易云的数据集成,实现企业系统间灵活对接weixin_381288182 小时前
HTML lang 属性的正确取值规范:BCP 47 格式详解与最佳实践阿丰资源2 小时前
基于SpringBoot智能化体育馆管理系统(附源码+文档+数据库,一键运行)阿荻在肝了2 小时前
Agent学习七:LangGraph学习-持久化与记忆二u0109147602 小时前
如何正确对 JavaScript 对象的键进行字母序排序maqr_1102 小时前
MySQL在事务中如何实现串行化_使用select lock in share mode查询是Yu欸2 小时前
SGLang 推理服务基础性能评测