Docs 菜单

Docs 主页开发应用程序MongoDB Manual

更改 oplog 的大小

在此页面上

  • A. 连接到副本集成员
  • B.(可选)验证 oplog 的当前大小
  • C. 更改副本集成员的 oplog 大小
  • D.(可选)Compact oplog.rs 以回收磁盘空间

警告

在 MongoDB 3.4 版及更早版本中,可通过删除并重新创建 local.oplog.rs 集合来调整 oplog 的大小。

在 MongoDB 3.6 及更高版本中,使用 replSetResizeOplog 命令调整 oplog 的大小,如本教程中所示。

从 MongoDB 4.0 开始,MongoDB 禁止删除 local.oplog.rs 集合。有关此限制的更多信息,请参阅Oplog 集合行为

此过程使用 replSetResizeOplog 命令来更改副本集每个节点上的 oplog [1] 大小,先在从节点上更改,再在主节点上更改。

首先对每个辅助副本集成员执行这些步骤。更改所有辅助成员的 oplog 大小后,请在主成员上执行这些步骤。

使用 mongosh连接到副本集节点:

mongosh --host <hostname>:<port>

注意

如果副本集强制执行身份验证,则必须以具有修改 local 数据库权限的用户身份进行身份验证,例如 clusterManagerclusterAdmin 角色。

要查看 oplog 的当前大小,请切换到 local 数据库并对 oplog.rs 集合运行 db.collection.stats()stats() 显示 Oplog 大小为 maxSize

use local
db.oplog.rs.stats().maxSize

maxSize 字段会以字节为单位显示集合的大小。

使用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

减小 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 所需特权。

← 副本集维护教程