文档菜单
文档首页
/
MongoDB 手册
/ / /

replSetResizeOplog

本页内容

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

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

变更在版本5.0: 中设置 replSetOplog 的大小,请使用mongosh,使用 Double() 构造函数。

replSetResizeOplog 允许您在不重启 mongod 进程的情况下动态调整 oplog 或其最小保留期。mongod 的基础上运行此命令。

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

此命令在以下环境中的部署中可用

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

重要

此命令在 M10+ 集群中不受支持。有关更多信息,请参阅 不受支持的命令。

该命令具有以下形式

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

该命令包含以下字段

字段
类型
描述
replSetResizeOplog
int
设置为 1
size
double

oplog的最大大小(以兆字节为单位)。

  • 可以指定的最小大小为990兆字节。

  • 可以指定的最大大小为1拍字节。

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

minRetentionHours
double

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

该值必须大于或等于0。值为0表示mongod应截断oplog,从最旧的条目开始以保持配置的最大oplog大小。

仅当mongod配置了minRetentionHours时,才会删除oplog条目:

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

  • oplog条目根据主机系统时钟比配置的小时数更旧。

要检查当前配置的最小oplog保留期,请参阅serverStatus命令输出中的oplogTruncation.oplogMinRetentionHours详细信息)。

提示

另请参阅

您可以在使用Wired Tiger存储引擎或内存存储引擎运行的mongod实例上使用replSetResizeOplog

有关使用replSetResizeOplog命令调整oplog大小的说明,请参阅更改自管理副本集成员的Oplog大小教程。

为了避免删除majority commit point,oplog可以增长超过其配置的大小限制。

您不能删除local.oplog.rs集合。有关此限制的更多信息,请参阅Oplog集合行为

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

除非您使用

重要

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

同样,减少最小oplog保留期会导致截断超过指定期间的oplog条目如果oplog已超过最大配置大小。

由于oplog大小或保留期减少导致的oplog截断可能导致客户端出现意外的行为,包括

  • 打开的change streams可能无效

  • 尚未复制那些操作日志条目的副本可能需要重新同步。

  • 使用带有mongodump--oplog的备份可能无法捕获截断前的条目。

当配置最小操作日志保留期时,mongod具有以下行为

  • 操作日志可以无限制地增长,以保留配置的小时数的操作日志条目。这可能导致由于高写入量和大保留期而减少或耗尽系统磁盘空间。

  • 如果操作日志超出其最大大小,即使操作日志返回到其最大大小或配置为较小的最大大小,mongod也可能继续占用该磁盘空间。有关减少操作日志大小不会立即返回磁盘空间的信息,请参阅Reducing Oplog Size Does Not Immediately Return Disk Space.

  • 在执行操作日志条目保留时,mongod会将系统墙钟与操作日志条目创建墙钟时间进行比较。集群组件之间的时钟漂移可能导致操作日志保留行为意外。有关集群成员之间时钟同步的更多信息,请参阅Clock Synchronization

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

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

要立即在减少oplog大小后释放未使用的磁盘空间,请在维护期间对oplog.rs集合运行compact命令。这将阻止对数据库上的所有操作。因此,运行compact将阻止oplog同步。有关调整oplog大小和压缩oplog.rs的说明,请参阅更改自托管副本集成员的Oplog大小。

replSetResizeOplog会独占(W)锁定oplog,并阻止在完成之前对集合上的其他操作。

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

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

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

上述命令返回此成员的oplog大小(以兆字节为单位)

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. 连接mongoshmongod副本集成员。

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

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

    该命令返回当前配置的最小oplog保留期限的mongod。例如

    1.5

    如果mongod没有最小oplog保留期限,则操作返回空结果。

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

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

返回

replSetReconfig