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