更改自托管副本集成员的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。