中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB 更改 Oplog Size 大小

發布時間:2020-07-07 14:19:15 來源:網絡 閱讀:1763 作者:Professor哥 欄目:MongoDB數據庫

MongoDB 的副本集同步中 Oplog 占了非常關鍵的作用。


Oplog Size 可不可以隨意更改?

https://docs.mongodb.com/manual/reference/configuration-options/#replication.oplogSizeMB
官方配置文檔說明

replication.oplogSizeMB
	Type:?integer

	The?maximum?size?in?megabytes?for?the?replication?operation?log?(i.e.,?the?oplog).
	Starting?in?MongoDB?4.0,?the?oplog?can?grow?past?its?configured?size?limit?to?avoid?deleting?the?majority?commit?point.
	By?default,?the?mongod?process?creates?an?oplog?based?on?the?maximum?amount?of?space?available.?For?64-bit?systems,?the?oplog?is?typically?5%?of?available?disk?space.
	Once?the?mongod?has?created?the?oplog?for?the?first?time,?changing?the?replication.oplogSizeMB?option?will?not?affect?the?size?of?the?oplog.
	To?change?the?oplog?size?of?a?running?replica?set?member,?use?the?replSetResizeOplog?administrative?command.?replSetResizeOplog?enables?you?to?resize?the?oplog?dynamically?without?restarting?the?mongod?process.
	
	See?Oplog?Size?for?more?information.
	The?replication.oplogSizeMB?setting?is?available?only?for?mongod.

其中,默認oplog 大小如無配置指定,則默認為當前磁盤空間的 5% 在 64位操作系統上。

一次生成 oplog 空間則終生有效,后續通過更改 mongod.conf 配置文件并重啟服務,均不生效。

在 MongoDB 3.6+ 版本中新增可以動態調整副本集 Oplog Size 的指令,無需重啟 mongod 服務。


查看當前 mongod 服務中分配的 Oplog Size 大小

查看當前已經分配的 oplog size 大小有幾個類似的指令

sh2:PRIMARY>?rs.printReplicationInfo()
configured?oplog?size:???12958.975341796875MB
log?length?start?to?end:?938secs?(0.26hrs)
oplog?first?event?time:??Thu?Apr?11?2019?15:03:05?GMT+0800?(CST)
oplog?last?event?time:???Thu?Apr?11?2019?15:18:43?GMT+0800?(CST)
now:?????????????????????Thu?Apr?11?2019?15:18:43?GMT+0800?(CST)


sh3:PRIMARY>?rs.printReplicationInfo()
sh3:PRIMARY>?db.printReplicationInfo()
sh3:PRIMARY>?db.getReplicationInfo()
{
????????"logSizeMB"?:?102400,
????????"usedMB"?:?905.03,
????????"timeDiff"?:?4704,
????????"timeDiffHours"?:?1.31,
????????"tFirst"?:?"Thu?Apr?11?2019?13:54:30?GMT+0800?(CST)",
????????"tLast"?:?"Thu?Apr?11?2019?15:12:54?GMT+0800?(CST)",
????????"now"?:?"Thu?Apr?11?2019?15:12:54?GMT+0800?(CST)"
}

logSizeMB / configured oplog size:?當前已配置的空間大小,單位 MB
usedMB: 當前已使用空間大小,單位 MB。
tFirst / oplog first event time: 當前 oplog 最開始的記錄時間。
tLast / oplog last event time: 當前 oplog 最新的更改記錄時間。
timeDiff / log length start to end: 當前mongod中當前更改記錄時間 - 最開始記錄時間,單位 秒。
timeDiffHours / log length start to end: 當前mongod中當前更改記錄時間 - 最開始記錄時間,單位 小時。


規劃需要更改的 oplog size 大小

根據業務場景不同,在高峰期獲取 mongod 實例的寫入量

sh2:PRIMARY>?rs.printReplicationInfo()
configured?oplog?size:???12958.975341796875MB
log?length?start?to?end:?938secs?(0.26hrs)
oplog?first?event?time:??Thu?Apr?11?2019?15:03:05?GMT+0800?(CST)
oplog?last?event?time:???Thu?Apr?11?2019?15:18:43?GMT+0800?(CST)
now:?????????????????????Thu?Apr?11?2019?15:18:43?GMT+0800?(CST)

如上面所示,項目大多都是 insert、update 等更新操作,所以 12G 的 oplog 空間,在業務高峰只能夠存儲最近 900 秒的變更操作日志。

如果需要使 oplog 保留更長的周期,那么需要合理規劃更大的?oplog.rs?空間大小。


更改 oplog size 大小
概述

oplog在內部作為上限集合存在,因此您無法在正常操作過程中修改其大小。
在大多數情況下,默認的oplog大小是可接受的大小;
但是,在某些情況下,您可能需要更大或更小的oplog。
例如,如果應用程序在短時間內執行大量多次更新或刪除,則可能需要更改oplog大小。

為了修改oplog大小,我們需要以此為復制集中的每個節點進行維護手動操作。該過程需要:停止 mongod 進程,并以非單節點方式啟動,修改oplog大小,再重啟該節點。

[重要]
請確保我們從副本集的從節點(Secondary)開始維護,并最后維護主節點(Primary)。

流程
  • 以單節點模式重啟節點

    在 Primary 節點上可以使用?rs.stepDown()?指令來強制手動切換為Secondary 節點。

  • 并保留就的 oplog 的條目作為查詢條件,清空?oplog.rs?集合并重新建立指定大小的?oplog.rs?集合。

  • 以副本集模式啟動 mongod 實例。


1. 首先在 secondary 節點上關閉 mongod 實例。比如通過?db.shutdownServer()?命令來關閉:

>?db.shutdownServer()

在其他端口上以單節點模式(不包含 --replSet 參數)重新啟動?mongod?實例。命令如下:

#?sudo?-u?mongod?mongod?--port?37017?--dbpath?/var/lib/mongo

2.?復制現有 Oplog (可選)
我們可以選擇備份現有結點的 oplog 來以防萬一,命令如下:

mongodump?--port?37017?--db?local?--collection?'oplog.rs'

3. 以新的大小和 Seed Entry 重建 oplog
保存 oplog 中最新的條目。例如,連接進入?mongo Shell,并通過如下命令進入 local 數據庫:

>?use?local

在?mongo Shell?窗口中,我們也可以使用如下命令來設置?db:

>?db?=?db.getSiblingDB('local')

確保?local.temp?集合為空的:

>?db.temp.drop()

使用?natural order?排序來找到 oplog 中最后一條數據,并通過?db.collection.save()?命令插入?local.temp?集合中:

>?db.temp.save(db.oplog.rs.find({},?{ts:?1,?h:?1}).sort({$natural:?-1}).limit(1).next())

檢驗?local.temp?集合中保存的最后一條 oplog 數據:

>?db.temp.find()

4. 刪除已存在老的 Oplog 集合
通過如下命令在?local?庫中刪除老的oplog.rs?集合:

>?db?=?db.getSiblingDB('local')
>?db.oplog.rs.drop()

結果會返回?true

5. 建立新的 Oplog 集合大小
通過?create?命令來建立新的 oplog(新的大小)。指定 size(單位是 bytes)。下面的命令會建立一個大小為?20 * 1024 * 1024 * 1024?也就是 20G 的 oplog 集合:

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

命令執行成功后會返回如下內容:

{?"ok"?:?1?}

6. 將之前保存在?local.temp?集合中的老的最后一條 oplog 數據插入到新的 oplog 集合中。 例如:

>?db.oplog.rs.save(?db.temp.findOne()?)

通過如下命令來確認:

>?db.oplog.rs.find()

7. 結束,以副本集模式重啟 mongod 實例。

>?db?=?db.getSiblingDB('admin')
>?db.shutdownServer()
#?service?mongod?restart

該復制集將會恢復并會在其成為主節點之前 “catch up” 數據。

8. 重復以上操作在所有我們希望修改 oplog 大小的機器上。最后再在主節點上進行該操作。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹棱县| 松桃| 嘉峪关市| 吉林市| 涞水县| 大竹县| 福海县| 茂名市| 隆安县| 苍梧县| 巫溪县| 桃源县| 喀喇| 富顺县| 寻乌县| 广昌县| 百色市| 镇原县| 南京市| 团风县| 金昌市| 寻乌县| 丹阳市| 通辽市| 安塞县| 陆良县| 新化县| 金湖县| 鄂伦春自治旗| 疏勒县| 公安县| 肇州县| 景泰县| 库尔勒市| 福鼎市| 祥云县| 连平县| 肃宁县| 宜州市| 化州市| 涟水县|