mongodb 3.2 修改oplogsize

  • 2019 年 10 月 4 日
  • 筆記

參考:https://blog.csdn.net/jianlong727/article/details/78933525

3.2修改oplogsize的文檔:https://docs.mongodb.com/v3.2/tutorial/change-oplog-size/

mongodb 3.2 修改oplogsize的方法:

1、關閉這個從節點的mongodb進程

1.1 關進程

use admin

db.shutdownServer()

1.2 註銷Replica set相關啟動參數,並修改port埠號

vim mongod.conf ,注釋掉下面幾行,然後修改下監聽埠

#replication:

#  oplogSizeMB: 4096

#  replSetName: set01

net:

port: 27111

然後,以單實例的方式啟動這個從節點:

mongod -f mongod.conf

2、備份節點oplog日誌

2.1 全備當前節點的oplog記錄

mongodump –port 27111 –db local –collection 'oplog.rs' -o /root/oplog_all

2.2 備份oplog中最後一條記錄

mongo  –port 27111

use local

db.optmp.drop()   —清空臨時表,存放oplog最近一條記錄

db.optmp.save(db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )     —將最近一條記錄存放到臨時集合中

db.optmp.find()     —驗證是否記錄已存入 , 類似如下:

{ "_id" : ObjectId("5b857e9aaa9ffcbad436b99d"), "ts" : Timestamp(1535468213, 1), "h" : NumberLong("-6700258201084773806") }

3 先刪除原oplog.rs集合,然後修改oplogsize:

use local

db.oplog.rs.drop()

然後再創建新oplog.rs集合 ,這裡創建為6G

> db.runCommand( { create: "oplog.rs", capped: true, size: (6 * 1024 * 1024 * 1024) } )

{ "ok" : 1 }

> db.oplog.rs.stats().maxSize   # 可以看到變成6G了

NumberLong("6442450944")

4、還原之前備份的最近一條記錄

> db.oplog.rs.save(db.optmp.findOne())

> db.oplog.rs.find()          —查詢驗證是否已插入

5、關閉當前單實例進程,然後修改配置,重新加入副本集

> use admin

> db.shutdownServer()

vim mongod.conf ,注釋掉下面幾行,然後修改下監聽埠

net:

port: 27017

replication:

oplogSizeMB: 6144

replSetName: set01

mongod -f mongod.conf

6、檢查節點狀態

登錄到mongo shell中檢查節點是否成功加入副本集

> rs.status()

檢查oplogSize是否生效

set01:SECONDARY> db.getReplicationInfo()

{

"logSizeMB" : 6144,    ## 可以看到這裡變成6GB了

"usedMB" : 0.01,

"timeDiff" : 54,

"timeDiffHours" : 0.02,

"tFirst" : "Wed Aug 29 2018 01:19:49 GMT+0800 (CST)",

"tLast" : "Wed Aug 29 2018 01:20:43 GMT+0800 (CST)",

"now" : "Wed Aug 29 2018 01:24:16 GMT+0800 (CST)"

}

set01:SECONDARY> rs.printReplicationInfo()

configured oplog size:   6144MB

log length start to end: 54secs (0.02hrs)

oplog first event time:  Wed Aug 29 2018 01:19:49 GMT+0800 (CST)

oplog last event time:   Wed Aug 29 2018 01:20:43 GMT+0800 (CST)

now:                     Wed Aug 29 2018 01:24:41 GMT+0800 (CST)

在4.0裡面,支援在線修改oplog的大小,從而不用重啟:

db.adminCommand({replSetResizeOplog:1, size: 6144})        ## 設置為6GB, 注意這裡的單位是 mb

use local

db.oplog.rs.stats().maxSize

4.0在線修改oplogsize的官方文檔:https://docs.mongodb.com/manual/reference/configuration-options/index.html#replication.oplogSizeMB

附, 如何估算需要的oplogsize大小?

可以通過如下的命令查看當前的oplog能存放多久的操作記錄:

    connecting to: 127.0.0.1:27017/admin

    set01:SECONDARY> rs.printReplicationInfo()

    configured oplog size:   4096MB

    log length start to end: 6223secs (1.73hrs)

    oplog first event time:  Mon Apr 22 2019 12:53:49 GMT+0800 (CST)

    oplog last event time:   Mon Apr 22 2019 14:37:32 GMT+0800 (CST)

    now:                     Mon Apr 22 2019 14:37:32 GMT+0800 (CST)

可以看到,目前的oplog是4GB ,根據oplog first event time 和 oplog last event time 的差值,可以得出4g的oplog 差不多能存放 100分鐘 的op操作。

如果我們將oplogsize擴大到 20G ,差不多能存放 500分鐘 的op操作。(即最大能容忍8小時的某個節點的宕機)