Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

replSetResizeOplog

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
replSetResizeOplog

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

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

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

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

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

M 个10 + 集群不支持此命令。 有关更多信息,请参阅不支持的命令。

该命令采用以下形式:

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

该命令接受以下字段:

字段
类型
说明
replSetResizeOplog
int
设置为 1
size
double

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

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

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

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

minRetentionHours
double

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

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

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

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

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

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

提示

另请参阅:

您可以在使用replSetResizeOplog mongodWired Tiger存储引擎 内存存储引擎 运行的 实例上使用 。

oplog有关使用replSetResizeOplog 命令调整 大小的过程,请参阅oplog 更改自管理副本集节点的 大小 教程。

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

不能删除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 的大小不会立即收回磁盘空间

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

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

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

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

replSetResizeOplogoplog使用独占 (W)锁,并阻止对集合执行其他操作,直到完成为止。

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

使用 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的大小会从中删除数据。 这可能会导致与该节点同步的副本成员过时。 要重新同步这些成员,请参阅重新同步自我管理副本集的成员。

  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