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小時的某個節點的宕機)