更改自管理副本集节点的 Oplog 大小
警告
不能删除 local.oplog.rs
集合。 有关此限制的更多信息,请参阅 oplog集合行为。
此过程使用 replSetResizeOplog
命令来更改副本集每个节点上的 oplog [1] 大小,先在从节点上更改,再在主节点上更改。
首先对每个辅助副本集成员执行这些步骤。更改所有辅助成员的 oplog 大小后,请在主成员上执行这些步骤。
A. 连接到副本集成员
使用 mongosh
连接到副本集节点:
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
是 double,并且必须大于 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
所需特权。