MongoDB配置中的oplogSize如何设置
导读:MongoDB oplogSize 设置指南 一、概念与默认值 oplog 是副本集用于复制的操作日志,保存在 local.oplog.rs 固定集合。它决定了从节点可容忍的离线时间窗口(oplog window)。 在 64 位系统上,...
MongoDB oplogSize 设置指南
一、概念与默认值
- oplog 是副本集用于复制的操作日志,保存在 local.oplog.rs 固定集合。它决定了从节点可容忍的离线时间窗口(oplog window)。
- 在 64 位系统上,若未在配置中显式指定,MongoDB 首次初始化时会将 oplog 设为所在磁盘空间的 5%。
- 自 MongoDB 4.0 起,oplog 在必要时可临时超过配置上限以避免删除多数提交点(用于稳定性),但配置值仍是规划窗口的主要依据。
二、设置与调整方式
-
首次部署(未初始化复制集前)
- 在启动 mongod 时通过命令行参数指定:
- 方式 A:命令行参数
mongod --replSet --oplogSize --dbpath - 方式 B:配置文件
replication: { oplogSizeMB: }
- 方式 A:命令行参数
- 然后初始化复制集:rs.initiate(); rs.add(…)。
- 说明:该值仅在首次创建 oplog 时生效;一旦创建,后续仅通过动态命令或重建方式调整。
- 在启动 mongod 时通过命令行参数指定:
-
运行中动态调整(推荐,适用于 3.6+)
- 连接 mongo shell,在需要调整的节点上执行(单位:MB):
- 查看当前大小:
use local
db.oplog.rs.stats().maxSize - 调整大小(示例设为 4096 MB):
db.adminCommand({ replSetResizeOplog: 1, size: 4096 } )
- 查看当前大小:
- 注意:每个副本集成员必须分别执行该命令;缩小 oplog 不会自动回收磁盘,需要后续 compact。
- 连接 mongo shell,在需要调整的节点上执行(单位:MB):
-
旧版本或无法使用 replSetResizeOplog 的场景
- 典型做法(维护模式):
- 对目标节点执行 rs.stepDown() 并安全关闭;
- 以单机模式临时启动(注释 replSet 等),备份 local.oplog.rs;
- 在 local 库删除并重建 oplog.rs(指定新的 capped size),并插入回放点(取最近一条记录的 ts/h);
- 关闭并恢复为副本集模式启动,重新加入复制集;
- 对其余节点逐一重复。
- 重要限制:自 MongoDB 4.0 起禁止删除 local.oplog.rs,因此该方式不再适用。
- 典型做法(维护模式):
三、容量规划与监控
- 规划原则
- 目标是在峰值写入速率下,oplog 窗口能覆盖至少一次备份/维护周期或预期的离线时长。
- 经验估算:oplog 窗口(小时)≈ oplogSizeMB / (平均写入速率MB/秒 × 3600)。例如:oplog 为 4096 MB,平均写入 1000 次/秒、每次约 1 KB,则窗口 ≈ 4096 / (1 × 3600) ≈ 1.14 小时。
- 关键监控与命令
- 查看 oplog 状态与窗口:
- rs.printReplicationInfo()
- db.getReplicationInfo()
- 关注指标:oplog window、oplog usage、replication lag;窗口过小或延迟升高时优先增大 oplog。
- 查看 oplog 状态与窗口:
四、注意事项
- 调整大小后,务必在每个副本集成员上分别执行(动态命令不会自动同步到其他成员)。
- 缩小 oplog 后,使用 local 库的 compact 回收磁盘空间;compact 会阻塞 oplog 复制,可能导致节点落后并触发重新全量同步,建议在低峰期执行。
- 从 4.0 起不要删除 local.oplog.rs;如需重建,请使用官方支持的流程或升级到支持动态调整的版本。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB配置中的oplogSize如何设置
本文地址: https://pptw.com/jishu/774344.html
