ITPub博客

首页 > 数据库 > NoSQL > mongodb在线调整Oplog Size的值

mongodb在线调整Oplog Size的值

原创 NoSQL 作者:水逸冰 时间:2021-07-25 17:14:40 1 删除 编辑
1.版本差异
3.4及之前的版本,改变oplog的大小需要删除然后重建local.oplog.rs集合。
3.6滞后可以使用replSetResizeOplog命令在线重建。从mongo 4.0开始,local.oplog.rs集合更是无法删除了,老的方式彻底走不通了。
2.在线修改
注意修改值必须在990M以上。
先从从节点调整,最后调整主节点
最后,不写入配置文件重启也会生效。
firstset:SECONDARY> use local
switched to db local
firstset:SECONDARY> db.oplog.rs.stats().maxSize
1038090240
firstset:SECONDARY> db.adminCommand({replSetResizeOplog: 1, size: 1000})
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1627203194, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1627203194, 1)
}
firstset:SECONDARY> db.oplog.rs.stats().maxSize
1048576000
依次执行所有节点,主节点最后。
arbiter仲裁节点执行会报错
firstset:ARBITER> use local
switched to db local
firstset:ARBITER> db.oplog.rs.stats().maxSize
firstset:ARBITER> db.adminCommand({replSetResizeOplog: 1, size: 1000})
{
"ok" : 0,
"errmsg" : "oplog does not exist",
"code" : 26,
"codeName" : "NamespaceNotFound"
}
3.压缩oplog,回收空间
4.4版本之前,当执行压缩oplog的时候,主从复制将会暂停。4.4之后,即使在压缩的时候,主从复制不再受到影响。
调整完oplog大小后,空间不会被主动回收,可以用compact回收空间
从库直接执行:
firstset:SECONDARY> use local
switched to db local
firstset:SECONDARY> db.runCommand({ "compact" : "oplog.rs" })
{ "bytesFreed" : 0, "ok" : 1 }
主库执行会报错:
firstset:PRIMARY> use local
switched to db local
firstset:PRIMARY> db.runCommand({ "compact" : "oplog.rs" })
{
"ok" : 0,
"errmsg" : "will not run compact on an active replica set primary as this is a slow blocking operation. use force:true to force",
"$clusterTime" : {
"clusterTime" : Timestamp(1627203956, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1627203956, 1)
}
可以使用force强制执行:
use local
db.runCommand({ "compact" : "oplog.rs" ,"force":true})
也可以服务降级后执行,但是这会触发主从切换,生产环境慎用:
firstset:PRIMARY> rs.stepDown()
{
       "ok" : 1,
       "$clusterTime" : {
               "clusterTime" : Timestamp(1627204246, 1),
               "signature" : {
                       "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                       "keyId" : NumberLong(0)
               }
       },
       "operationTime" : Timestamp(1627204246, 1)
}
firstset:SECONDARY> db.runCommand({ "compact" : "oplog.rs" })
{ "bytesFreed" : 0, "ok" : 1 }


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31480688/viewspace-2783169/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: mysql锁之死锁
请登录后发表评论 登录
全部评论
精通oracle,mysql和linux,热衷于研究数据库,擅长shell和Python自动化运维。VX:18302174682

注册时间:2017-08-05

  • 博文量
    117
  • 访问量
    188633