(一)oplog介紹
oplog是MongoDB數據庫的操作日志,記錄了MongoDB數據庫的所有寫操作,類似MySQL數據庫的binlog日志。在MongoDB副本集中,oplog從主節點被復制到次級節點,通過次級節點對日志進行重做,實現次級節點與主節點數據一致。oplog日志保存在local.oplog.rs集合中。
(二)修改oplog的大小
oplog大小修改根據數據庫版本,有2種不同的方法:
- 在MongoDB 3.4及更早的版本中,直接刪除並重建local.oplog.rs集合來調整操作日志的大小;
- 在MongoDB 3.6及后續的版本中,使用replSetResizeOplog命令來調整操作日志的大小;
從MongoDB 4.0開始,MongoDB禁止刪除local.oplog.rs集合,所以只能用replSetResizeOplog來修改oplog的大小了。
這里演示在MongoDB 4.2版本上修改oplog的大小,先在次級節點上修改操作日志的大小,最后在主機點上修改。
具體操作步驟如下:
STEP1:連接到副本集成員
mongo --authenticationDatabase admin -u replica -p replica
STEP2:【可選】驗證oplog的大小
rstest:PRIMARY> use local switched to db local rstest:PRIMARY> db.oplog.rs.stats().maxSize NumberLong(1970031616)
STEP3:修改副本集節點oplog的大小,oplog必須大於990MB,這里改為1000MB
rstest:PRIMARY> db.adminCommand({replSetResizeOplog:1,size:1000}) { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1593527768, 1), "signature" : { "hash" : BinData(0,"7fw3+0veB35tVTFl83c57kvM0OI="), "keyId" : NumberLong("6841443127941660675") } }, "operationTime" : Timestamp(1593527768, 1) }
STEP4:【可選】壓縮oplog.rs以回收磁盤空間
減小oplog的大小不會回收已經分配的磁盤空間,必須壓縮oplog.rs來回收磁盤空間。
use local db.runCommand({"compact" : "oplog.rs"})
注意:當執行壓縮時,副本集成員無法復制oplog條目,可能會導致主節點的操作日志被覆蓋,刺激節點無法同步數據而產生重新完全同步,建議在無業務的時間段內執行壓縮操作。
【完】