通常 oplog 建议保留 24-48 小时 的操作量即可,建议调整到 5-10GB 就足够了。

释放空间操作步骤

步骤 1:缩小 oplog 上限(在线操作,无需重启)

// 在主节点执行
use admin

// 缩小到 8GB(8192MB)
db.adminCommand({ replSetResizeOplog: 1, size: 8192 })

或缩小到 5GB(5120MB):

db.adminCommand({ replSetResizeOplog: 1, size: 5120 })

步骤 2:执行 compact 整理碎片

use local
db.runCommand({ compact: "oplog.rs" })

步骤 3:验证结果

db.oplog.rs.stats()

预期结果:

  • maxSize 变为新的配置值(如 5368709120 for 5GB)
  • size 会减小,但不会立即到 0,因为 capped collection 特性

重要提醒

⚠️ 执行 replSetResizeOplog 会截断(删除)最旧的操作日志,确保:

  1. 所有副本节点当前都是可用状态(不是 recovering 或 stale)
  2. 业务低峰期执行,避免影响同步

如果某个副本节点 lag 太远,可能需要重新全量同步。

快速检查副本状态

rs.status()

确认所有节点 stateStrSECONDARYPRIMARY,没有 RECOVERINGROLLBACK 状态。

总结

操作 命令 影响
replSetResizeOplog 缩小上限,截断旧日志 副本需要能跟上同步
compact 整理存储碎片,释放物理空间 轻微性能影响,建议低峰期执行

执行这两个命令后,你的磁盘空间应该能释放到 5-8GB 左右(取决于你选择的新大小)。

不需要重启 MongoDB 服务