MongoDB节点一直处于RECOVERING状态怎么排查_Oplog陈旧与全量同步失败

MongoDB副本集节点卡在RECOVERING状态的根本原因只有两个:一是无法追上主节点oplog(oplog过短或过旧),二是全量同步中途失败且未重试成功;其他如网络、磁盘、权限等问题只是诱因,不直接导致卡住。为什么 MongoDB 副本集节点卡在 RECOVERING 状态根本原因只有两个:要么无法追上主节点的 oplog(oplog 太短或太旧),要么全量同步(initial sync)中途失败且没重试成功。不是网络抖动、磁盘满、权限错这些"外围问题"导致的卡住,而是同步机制本身被阻断了。典型现象是:rs.status() 里该节点状态长期为 RECOVERING,日志里反复出现 cannot find starting oplog entry 或 initial sync pending,但没报具体错误码。oplog 不够长:主节点已把从节点需要的起始 oplog 条目覆盖掉了全量同步被中断后未自动重启:比如复制过程中磁盘写满、目标节点崩溃、或 storage.mmapv1(已弃用)下锁冲突从节点时间落后太多:导致 oplog 时间戳校验失败(尤其在 WT 引擎 + logicalSessionTimeoutMinutes 配置敏感时)查 oplog 是否陈旧:用 db.getReplicationInfo() 和 db.oplog.rs.find().sort({natural: -1}).limit(1)先确认主节点的 oplog 覆盖窗口是否足够。执行 db.getReplicationInfo() 看 timeDiffHours ------ 如果小于从节点上次同步时间差,就铁定追不上。再手动查最新一条 oplog:db.oplog.rs.find().sort({natural: -1}).limit(1),看 ts 字段的时间戳。对比从节点日志里报错的 "need oplog entry at timestamp X",如果 X 已不在主节点 oplog 中,说明陈旧。修复方法不是"拉长 oplog",而是删掉从节点数据目录,强制重新 initial sync临时补救可改主节点 oplogSizeMB 并重启,但仅对后续同步有效,不能救当前卡住的节点注意:4.4+ 版本默认使用 WiredTiger,oplog 是 capped collection,大小由 storage.oplogMinRetentionHours 控制,不是固定大小判断是否卡在全量同步:看 mongod 日志里的 InitialSync 关键字和 progress 字段启动从节点后,日志里会密集打印 InitialSync 相关行。如果某条 progress 卡住不动超过 30 分钟(比如一直停在 "collection": "admin.system.version"),基本就是同步卡死。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
夏天拐跑了西瓜1 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
魔猴疯猿2 小时前
从0到1用Python开发第一个智能体
人工智能·python·深度学习·神经网络·机器学习
wuminyu2 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
笨小孩@GF 知行合一2 小时前
易语言-高级应用
数据库·编程·易语言·中文编程
xiaoqi01953 小时前
机器学习因子分析实战:从量化特征到可视化决策
人工智能·python·机器学习
KaiwuDB3 小时前
KaiwuDB 运维实战04:DRBD + KaiwuDB——物联网场景下的低成本数据库高可用方案
运维·数据库·物联网·时序数据库·kaiwudb·aiot·多模数据库
Escalating_xu3 小时前
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
happylifetree3 小时前
Python14:核心语法-数据存储与运算-字符串定义
python
hhb_6183 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法