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助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
小玮看世界1 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地Java陈序员1 小时前
轻量运维面板!一款现代化的服务器控制面板工具!2601_962097361 小时前
1. 使用 C 或 C++ 扩展 PythonYanjun2i1 小时前
Agent学习记录五:Pydantic验证程序员阿鹏2 小时前
为什么MySQL InnoDB选择B+树?月光船幽幽2 小时前
跨范式映射的稳定接口设计杜大哥2 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?wuyk5552 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)信誓旦旦的程序猿2 小时前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历