改变 Oplog 的大小
WARNING
在 MongoDB 3.4 及更早版本中,oplog 通过删除和重新创建
local.oplog.rs
集合来调整大小。在 MongoDB 3.6 及更高版本中,使用
replSetResizeOplog
命令调整 oplog 的大小,如本教程所示。从 MongoDB 4.0 开始,MongoDB 禁止删除
local.oplog.rs
集合。有关此限制的更多信息,请参阅Oplog Collection Behavior 。此过程使用命令更改副本集每个节点上的 oplog [ 1 ]
replSetResizeOplog
的大小,从从节点开始,然后再继续到 主节点。首先对每个辅助副本集成员 执行这些步骤。更改所有次要成员的 oplog 大小后,对主要成员执行这些步骤。
A.连接到副本集节点
使用连接到副本集节点'mongosh`:
mongosh --host <hostname>:<port>
NOTE
如果副本集强制执行身份验证,则必须以具有修改数据库权限的用户身份进行身份验证
local
,例如clusterManager
或clusterAdmin
角色。
B.(可选)验证oplog的当前大小
要查看 oplog 的当前大小,请切换到local
数据库并db.collection.stats()
针对 oplog.rs
集合运行。stats()
将 oplog 大小显示为maxSize
.
use local
db.oplog.rs.stats().maxSize
该maxSize
字段以字节为单位显示集合大小。
C. 改变副本集节点的oplog大小
使用命令调整 oplog 的大小replSetResizeOplog
。是双精度 size
值,必须大于990
兆字节。size
显式地投射 oplogmongosh
, 使用 Double()
构造函数。
以下操作将副本集节点的 oplog 大小更改为 16 GB,即 16000 MB。
db.adminCommand({replSetResizeOplog: 1, size: Double(16000)})
[ 1 ] | oplog 可以增长到超过其配置的大小限制以避免删除majority commit point . |
---|---|
D.(可选)压缩oplog.rs
以回收磁盘空间
减小 oplog 的大小不会自动回收分配给原始 oplog 大小的磁盘空间。您必须 compact
针对数据库中的oplog.rs
集合 运行local
以回收磁盘空间。增加 oplog 大小后compact
在集合上运行没有任何好处。oplog.rs
IMPORTANT
从 MongoDB v4.4 开始,副本集成员可以在
compact
操作进行时复制 oplog 条目。以前,oplog 复制会在压缩期间暂停。因此,建议仅在维护窗口期间执行 oplog 压缩,此时可以最小化或停止写入。在 MongoDB 4.4 及更高版本中,不再需要将 oplog 上的压缩操作限制在维护窗口,因为 oplog 复制可以在压缩期间正常继续。
不要针对主要副本集节点运行。**compact
将mongo
shell 直接连接到主节点(而不是副本集)并运行rs.stepDown()
. 如果成功,则主要步骤会下降。在mongo
shell 中,compact
在现在的从节点上运行命令。
以下操作compact
针对 oplog.rs
集合运行命令:
use local
db.runCommand({ "compact" : "oplog.rs" } )
对于强制执行身份验证的集群,以对数据库和集合具有compact
特权操作的用户身份进行身份验证。有关身份验证要求的完整文档,请参阅Required Privileges 。local``oplog.rs
compact
compact
原文链接 - https://docs.mongodb.com/manual/tutorial/change-oplog-size/
译者:陆文龙