Docs 主页 → 开发应用程序 → MongoDB Manual
更改 oplog 的大小
警告
在 MongoDB 3.4 版及更早版本中,可通过删除并重新创建 local.oplog.rs
集合来调整 oplog 的大小。
在 MongoDB 3.6 及更高版本中,使用 replSetResizeOplog
命令调整 oplog 的大小,如本教程中所示。
从 MongoDB 4.0 开始,MongoDB 禁止删除 local.oplog.rs
集合。有关此限制的更多信息,请参阅Oplog 集合行为。
此过程使用 replSetResizeOplog
命令来更改副本集每个节点上的 oplog [1] 大小,先在从节点上更改,再在主节点上更改。
首先对每个辅助副本集成员执行这些步骤。更改所有辅助成员的 oplog 大小后,请在主成员上执行这些步骤。
A. 连接到副本集成员
mongosh --host <hostname>:<port>
注意
如果副本集强制执行身份验证,则必须以具有修改 local
数据库权限的用户身份进行身份验证,例如 clusterManager
或 clusterAdmin
角色。
B.(可选)验证 oplog 的当前大小
要查看 oplog 的当前大小,请切换到 local
数据库并对 oplog.rs
集合运行 db.collection.stats()
。stats()
显示 Oplog 大小为 maxSize
。
use local db.oplog.rs.stats().maxSize
maxSize
字段会以字节为单位显示集合的大小。
C. 更改副本集成员的 oplog 大小
使用replSetResizeOplog
命令调整 oplog 的大小。 size
是双精度值,并且必须大于990
兆字节。要在mongosh
中显式转换 oplog size
,请使用Double()
构造函数。
以下操作将副本集成员的 oplog 大小更改为 16 GB,即 16000 MB。
db.adminCommand({replSetResizeOplog: 1, size: Double(16000)})
[1] | oplog 的大小可能会超过其配置的大小限制,从而避免删除 majority commit point 。 |
D.(可选)压缩oplog.rs
以回收磁盘空间
减小 oplog 的大小不会自动回收分配给原始 oplog 大小的磁盘空间。必须对 local
数据库中的 oplog.rs
集合运行 compact
才能回收磁盘空间。增加 oplog 大小后,对于在 oplog.rs
集合上运行 compact
没有任何好处。
重要
副本集成员可以在compact
操作进行时复制 oplog 条目。因此,不再需要将对 oplog 的压实操作限制在维护窗口内,因为 oplog 复制可以在压实期间正常继续。
不要针对主副本集成员运行 compact
。将 mongo
Shell 直接连接到主节点(而不是副本集),并运行 rs.stepDown()
。如果成功,主节点将降级。在 mongo
Shell 中,对现在的从节点成员运行 compact
命令。
以下操作针对 oplog.rs
集合运行 compact
命令:
use local db.runCommand({ "compact" : "oplog.rs" } )
对于强制进行身份验证的集群,使用 local
数据库和 oplog.rs
集合上的 compact
特权动作,以用户身份进行身份验证。有关 compact
身份验证要求的完整文档,请参阅 compact
所需特权。