replSetResizeOplog
定义
replSetResizeOplog
replSetResizeOplog
还支持指定保存 oplog 条目的最小小时数。在版本5中进行了更改。 0 :要在
mongosh
中设置replSetOplog
大小,请使用Double()
构造函数。replSetResizeOplog
使您能够动态调整 oplog 的大小或其最短保留期,而无需重新启动mongod
进程。您必须针对
admin
数据库运行此命令。该命令采用以下形式:
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
replSetResizeOplog
采用以下字段:
字段 | 类型 | 说明 |
---|---|---|
replSetResizeOplog | int | 设置为 1 。 |
size | double | oplog 的最大大小(以 MB 为单位)。
|
minRetentionHours | double | 可选。保留 oplog 条目的最小小时数,其中小数值表示小时的小数部分。例如,值 该值不得小于 以
要查看当前配置的最短 oplog 保留期,请参阅 |
行为
您可以在使用replSetResizeOplog
mongod
Wired Tiger 存储引擎 或 内存存储引擎 运行的 实例上使用 。
请参阅更改自管理副本集节点的 Oplog 大小教程,了解使用replSetResizeOplog
命令调整 oplog 大小的过程。
oplog 的大小可能会超过其配置的大小限制,从而避免删除 majority commit point
。
不能删除local.oplog.rs
集合。有关此限制的更多信息,请参阅Oplog 集合行为。
replSetResizeOplog
覆盖启动时设置的最大 oplog 大小或最短 oplog 保留期:
新的 oplog 大小在服务器重新启动后仍然存在,除非您使用:
重要
最短 Oplog 保留期
在配置了最短 oplog 保留期时,mongod
具有以下行为:
oplog 的大小可以不受限制地增长,以便在配置的小时数内保留 oplog 条目。由于写入量高且保留期长,这可能会导致系统磁盘空间减少或耗尽。
如果 oplog 超过其最大值,即使后来恢复到其最大值或配置为较小的最大值,
mongod
仍可能继续占用磁盘空间。请参阅减小 oplog 的大小不会立即收回磁盘空间。mongod
在执行 oplog 条目保留时,将系统挂钟与 oplog 条目创建挂钟时间进行比较。集群组件之间的时钟漂移可能会导致意外的 oplog 保留行为。有关跨集群节点的时钟同步的更多信息,请参阅时钟同步。
replSetResizeOplog
不会复制到其他节点
使用replSetResizeOplog
更改给定副本集成员的 oplog 大小或最短 oplog 保留期不会更改副本集中任何其他成员的 oplog 大小。您必须在集群中的每个副本集节点上运行replSetResizeOplog
,才能更改所有节点的 oplog 大小或最短保留期。
减小 oplog 大小不会立即返回磁盘空间
减小 oplog 的大小不会立即回收该磁盘空间。这包括由于 oplog 事件截断早于最短 Oplog 保留期截断而导致的 oplog 大小减小。
要在减小 oplog 大小后立即释放未使用的磁盘空间,请在维护期间对local
数据库中的oplog.rs
集合运行compact
。 compact
会阻止对其运行的数据库执行的所有操作。因此,针对oplog.rs
运行compact
会阻止 oplog 同步。有关调整 oplog 大小和压缩oplog.rs
的过程,请参阅更改自管理副本集节点的 Oplog 大小。
资源锁定
replSetResizeOplog
对oplog
使用独占 (W) 锁,并阻止对集合执行其他操作,直到完成为止。
有关 MongoDB 中锁定的更多信息,请参阅常见问题解答:并发。
举例
更改最大 Oplog 大小
使用 db.collection.stats()
mongosh
方法显示当前的最大 oplog 大小 maxSize
(以 MB 为单位)。例如:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上述命令返回该节点的 oplog 大小(以 MB 为单位):
990
以下命令使用replSetResizeOplog
将此成员的 oplog 大小更改为16384兆字节:
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
要验证新的 oplog 大小,请重新运行 db.collection.stats()
方法:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
上述命令返回:
"maxSize": NumberLong("16834")
警告
减小节点中 oplog 的大小会从中删除数据。这可能会导致与该节点同步的副本成员过时。要重新同步这些成员,请参阅重新同步自我管理副本集的成员。
更改最短 Oplog 保留期
可选。使用
db.serverStatus()
命令将当前的最低 oplog 保留值验证为oplogTruncation.oplogMinRetentionHours
:db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours 该命令返回当前为
mongod
配置的最短 oplog 保留期。例如:1.5 如果
mongod
没有最短 oplog 保留期,操作将返回空结果。使用
replSetResizeOplog
命令修改配置的最短 oplog 保留期。例如,以下操作将最短 oplog 保留期设置为2
小时:db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })