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助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
ClouGence2 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践你好潘先生4 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 tokenAgent_大师4 小时前
WebSocket 行情重连成功,K线缺口不会自动消失荣码4 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑copyer_xyf5 小时前
FastAPI 如何连接 MySQLapocelipes18 小时前
常用编程语言和库的正则表达式性能对比先吃饱再说20 小时前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?用户83562907805120 小时前
使用 Python 在 PDF 中创建与管理书签Nturmoils20 小时前
字段太多看不全,ksql 的展开模式和输出控制怎么用Databend1 天前
Agent 轨迹分析与归因的数据工程实践