Docs 菜单

Docs 主页开发应用程序MongoDB Manual

replSetResizeOplog

在此页面上

  • 定义
  • 语法
  • 命令字段
  • 行为
  • 举例
replSetResizeOplog

replSetResizeOplog 还支持指定保留 oplog 条目的最小小时数。

在版本5中进行了更改。 0 :要在mongosh中设置replSetOplog大小,请使用Double()构造函数。

replSetResizeOplog使您能够动态调整 oplog 的大小或其最短保留期,而无需重新启动mongod进程。

您必须针对 admin 数据库运行此命令。

该命令采用以下形式:

db.adminCommand(
{
replSetResizeOplog: <int>,
size: <double>,
minRetentionHours: <double>
}
)

该命令接受以下字段:

字段
类型
说明
replSetResizeOplog
int
设置为 1
size
双精度浮点数

oplog 的最大大小(以 MB 为单位)。

  • 可以指定的最小大小为 990 MB。

  • 可以指定的最大大小为 1 PB。

  • mongosh中使用Double()size显式转换为双精度值。请参阅更改最大 Oplog 大小。

minRetentionHours
双精度浮点数

可选。保留 oplog 条目的最小小时数,其中小数值表示小时的小数部分。例如,值 1.5 表示一小时三十分钟。

该值不得小于 0。值为 0 表示 mongod 应从最旧的条目开始截断 oplog,以维持配置的最大 oplog 大小。

minRetentionHours 配置的 mongod 仅在以下情况下删除 oplog 条目:

  • oplog 已达到最大配置大小,并且

  • oplog 条目早于根据主机系统时钟配置的小时数。

要查看当前配置的最短 oplog 保留期,请参阅 serverStatus 命令输出中的 oplogTruncation.oplogMinRetentionHours

提示

另请参阅:

您只能在使用replSetResizeOplog mongodWired Tiger 存储引擎 运行的 实例上使用 。

有关使用replSetResizeOplog 命令调整 oplog 大小的过程,请参阅 更改 Oplog 的大小 教程。

oplog 的大小可能会超过其配置的大小限制,从而避免删除 majority commit point

从 MongoDB 4.0 开始,MongoDB 禁止删除 local.oplog.rs 集合。有关此限制的更多信息,请参阅Oplog 集合行为

replSetResizeOplog 覆盖启动时设置的最大 oplog 大小或最短 oplog 保留期:

新的 oplog 大小在服务器重新启动后仍然存在,除非您使用:

重要

减小最大 oplog 大小会导致最旧的 oplog 条目被截断,直到 oplog 达到新配置的大小。

同样,如果oplog 超过了最大配置大小,则缩短最短 oplog 保留期会导致早于指定时间段的 oplog 条目被截断。

由于 oplog 大小或保留期减少而导致的 Oplog 截断可能会导致仍在读取这些 oplog 条目的客户端出现意外行为,包括:

  • 开放式变更流可能失效

  • 未复制这些 oplog 条目的从节点可能需要重新同步

  • 使用mongodump--oplog针对该成员进行的备份可能无法捕获截断之前的条目。

在配置了最短 oplog 保留期时, mongod有以下行为:

  • oplog 的大小可以不受限制地增长,以便在配置的小时数内保留 oplog 条目。由于写入量高且保留期长,这可能会导致系统磁盘空间减少或耗尽。

  • 如果 oplog 的大小超过其最大大小,则即使mongod oplog 恢复到其最大大小 配置为较小的最大大小, 仍可能会继续保留该磁盘空间。请参阅 减小 oplog 大小不会立即返回磁盘空间。

  • mongod 在执行 oplog 条目保留时,将系统挂钟与 oplog 条目创建挂钟时间进行比较。集群组件之间的时钟漂移可能会导致意外的 oplog 保留行为。有关跨集群节点的时钟同步的更多信息,请参阅时钟同步

使用replSetResizeOplog更改给定副本集成员的 oplog 大小或最小 oplog 保留期不会更改副本集中任何其他成员的 oplog 大小。您必须在集群中的每个副本集节点上运行replSetResizeOplog ,才能更改所有节点的 oplog 大小或最短保留期。

减小 oplog 大小不会立即回收该磁盘空间。这包括由于截断早于最短 oplog 保留期的 oplog 事件而导致的 oplog 大小减小。

要在减小 oplog 大小后立即释放未使用的磁盘空间,请在维护期间对 local 数据库中的 oplog.rs 集合运行 compactcompact 阻止对其运行的数据库的所有操作。因此,针对 oplog.rs 运行 compact 可以防止 oplog 同步。有关调整操作日志大小和压缩 oplog.rs 的过程,请参阅更改 Oplog 大小

在 4.2.2 版本中进行了更改

  • 对于 MongoDB 4 。 2 。 2及更高版本中, replSetResizeOplogoplog } 采用独占 (W) 锁,并在完成之前阻止对集合的其他操作。

  • 对于 MongoDB 4 。 2 。 1及更早版本中, replSetResizeOplog采用全局独占 (W) 锁,并在完成之前阻止所有其他操作。

有关 MongoDB 中锁定的更多信息,请参阅常见问题解答:并发。

使用db.collection.stats() mongosh方法显示当前最大 oplog 大小maxSize (以 MB 为单位)。例如:

db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize

上述命令返回该节点的 oplog 大小(以 MB 为单位):

990

以下命令使用replSetResizeOplog将此成员的 oplog 大小更改为16384 MB:

db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})

要验证新的 oplog 大小,请重新运行 db.collection.stats() 方法:

db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize

上述命令返回:

"maxSize": NumberLong("16834")

警告

减少节点中 oplog 的大小会从中删除数据。这可能会导致与该节点同步的副本节点过时。要重新同步这些成员,请参阅重新同步副本集的节点

  1. mongosh连接到mongod副本集成员。

  2. 可选。使用 db.serverStatus() 命令将当前的最低 oplog 保留值验证为 oplogTruncation.oplogMinRetentionHours

    db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours

    该命令返回当前为 mongod 配置的最短 oplog 保留期。例如:

    1.5

    如果 mongod 没有最短 oplog 保留期,操作将返回空结果。

  3. 使用replSetResizeOplog命令修改配置的最短 oplog 保留期。例如,以下操作将最短 oplog 保留期设置为2小时:

    db.adminCommand({
    "replSetResizeOplog" : 1,
    "minRetentionHours" : 2
    })
← replSetReconfig