更改操作日志的大小

在本页面

3.6 版的新功能。

此过程使用replSetResizeOplog命令更改副本集每个成员上 oplog 的大小,从secondary成员开始,然后再进行primary

Important

您只能在与有线老虎存储引擎一起运行的副本集成员上运行replSetResizeOplog

对每个secondary副本集成员* first *执行这些步骤。更改所有辅助成员的操作日志大小后,请在primary上执行以下步骤。

A.连接到副本集成员

使用mongo shell 连接到副本集成员:

mongo --host <hostname>:<port>

Note

如果副本集强制使用authentication,则您必须以具有修改local数据库权限的用户身份进行身份验证,例如clusterManagerclusterAdmin角色。

B。(可选)验证操作日志的当前大小

要查看操作日志的当前大小,请切换到local数据库并针对oplog.rs集合运行db.collection.stats()stats()将操作日志大小显示为maxSize

use local
db.oplog.rs.stats().maxSize

maxSize字段显示收集大小(以字节为单位)。

C.更改副本集成员的操作日志大小

要更改大小,请运行replSetResizeOplog并将所需大小(以兆字节为单位)作为size参数传递。指定的大小必须大于990或 990 兆字节。

以下操作将副本集成员的操作日志大小更改为 16 GB 或 16000 兆字节。

db.adminCommand({replSetResizeOplog: 1, size: 16000})

D。(可选)压缩 oplog.rs 以回收磁盘空间

减小操作日志的大小不会自动回收分配给原始操作日志大小的磁盘空间。您必须对local数据库中的oplog.rs集合运行compact以回收磁盘空间。增加 oplog 大小后,在oplog.rs集合上运行compact没有任何好处。

Important

compact操作正在进行时,副本集成员无法复制操作日志条目。在compact运行时,该成员可能远远落后于主要成员,因此无法恢复复制。成员在compact过程中变得“陈旧”的可能性随群集写入吞吐量的增加而增加,并且可能因 oplog 大小的减小而进一步加剧。

考虑安排一个维护时段,在此期间限制写操作或停止写操作,以减轻成员“陈旧”并需要full resync的风险。

不要对主副本集成员运行compact。将mongo shell 连接到主数据库并运行rs.stepDown()。如果成功,则主数据库降级并关闭所有打开的连接。将mongo shell 重新连接到该成员,然后在该成员上运行compact命令。

以下操作针对oplog.rs集合运行compact命令:

use local
db.runCommand({ "compact" : "oplog.rs" } )

对于执行authentication的群集,通过对local数据库和oplog.rs集合执行compact特权操作来以用户身份进行身份验证。有关compact身份验证要求的完整文档,请参见紧凑的必需特权