目錄
Oplog是什麼?
Oplog的作用
Oplog的大小設置影響什麼?
怎麼查看oplog的狀態?
首頁 資料庫 MongoDB OPLOG(操作日誌)在MongoDB複製中的作用是什麼?

OPLOG(操作日誌)在MongoDB複製中的作用是什麼?

Jul 14, 2025 am 12:18 AM
oplog

Oplog是MongoDB副本集實現數據同步的關鍵機制。它是local數據庫中的一個特殊capped collection,全稱operations log,記錄主節點上所有寫操作(如插入、更新、刪除),包含時間戳、操作類型、目標集合及修改內容等信息。從節點通過複製並重放這些操作來保持與主節點一致。例如,主節點執行insert操作後,該操作會被記錄到oplog中,從節點讀取並執行相同操作以實現同步。 Oplog的作用包括:1. 成為數據同步的基礎,從節點按順序拉取並執行oplog條目實現異步複製;2. 支持故障恢復,節點重啟後可從中斷位置繼續同步;3. 保障讀寫分離,因數據一致性得以實現,應用程序可將讀請求分發至從節點。此外,oplog具有冪等性,確保多次執行結果一致,提升容錯能力。 Oplog的大小影響複製延遲容忍度和恢復窗口長度,默認佔磁盤空間5%,生產環境建議根據寫入負載手動設置,如配置10GB可通過replication: oplogSizeMB: 10240完成。查看oplog狀態的方法包括:db.oplog.rs.find().sort({$natural: -1}).limit(1)查看最新記錄,db.runCommand({replSetGetStatus: 1})獲取統計信息,db.oplog.rs.stats()查看容量和時間範圍,幫助判斷是否需調整大小。

What is the role of the oplog (operations log) in MongoDB replication?

MongoDB的副本集(Replica Set)依賴oplog來實現數據同步。簡單來說, oplog記錄了主節點上所有修改數據的操作,其他節點通過複製這些操作來保持與主節點的數據一致。

Oplog是什麼?

oplog全稱是operations log,是一個特殊的capped collection(固定大小集合),位於local數據庫中。它記錄了所有寫操作,比如插入、更新和刪除。每個操作都會以日誌的形式保存,並包含時間戳、操作類型、目標集合以及具體修改內容等信息。

舉個例子:當你在主節點執行一個insert操作時,這個操作會被記錄到oplog中。然後從節點讀取這條日誌,在自己的節點上重放同樣的操作,最終達到數據一致。

Oplog的作用

  • 數據同步的基礎:從節點通過拉取主節點的oplog條目並按順序執行,從而實現異步複製。
  • 故障恢復的關鍵:如果某個從節點宕機後重新上線,它可以從中斷的位置繼續拉取oplog,而不是從頭開始同步。
  • 支持讀寫分離:雖然不是直接由oplog完成,但因為有了oplog保障的數據一致性,才讓應用程序可以放心地將讀請求分發到從節點。

值得注意的是,oplog是冪等的,也就是說即使同一個操作被多次執行,結果也是一樣的。這為複製過程提供了容錯能力。

Oplog的大小設置影響什麼?

默認情況下,MongoDB會根據磁盤空間自動分配oplog的大小,通常佔可用空間的5%左右。但在生產環境中,你可能需要手動調整它的大小,因為它直接影響:

  • 複製延遲容忍度:如果oplog太小,當從節點因網絡或負載問題落後較多時,可能會錯過部分操作,導致無法追上主節點。
  • 恢復窗口長度:oplog越大,從節點可以回退的時間點就越長,也就越容易進行故障恢復。

常見做法是根據寫入負載估算oplog容量。例如,如果你每小時寫入量較大,建議將oplog設置為能容納至少幾小時的操作記錄。

設置方法是在初始化副本集時通過配置文件指定:

 replication:
  oplogSizeMB: 10240 # 設置為10GB

或者在運行時動態擴展(需重啟mongod實例):

  1. 停止服務
  2. 修改配置文件
  3. 重啟服務

怎麼查看oplog的狀態?

你可以連接到MongoDB實例,使用以下命令查看當前oplog狀態:

 use local
db.oplog.rs.find().sort({$natural: -1}).limit(1)

這條命令會顯示最近的一條oplog記錄。如果你想看oplog的統計信息,包括當前大小和使用情況:

 db.runCommand({replSetGetStatus: 1})

另外,也可以使用如下命令查看oplog的總容量和活躍時間範圍:

 db.oplog.rs.stats()

這些信息可以幫助你判斷是否需要調整oplog的大小。


基本上就這些。 Oplog雖然是個幕後角色,但它是MongoDB複製機制的核心組件之一,理解它有助於更好地管理副本集和排查同步相關的問題。

以上是OPLOG(操作日誌)在MongoDB複製中的作用是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1605
29
PHP教程
1510
276
MongoDB的免費層產品(例如在Atlas上)有什麼局限性? MongoDB的免費層產品(例如在Atlas上)有什麼局限性? Jul 21, 2025 am 01:20 AM

MongoDBAtlas的免費層級存在性能、可用性、使用限制及存儲等多方面局限,不適合生產環境。首先,其提供的M0集群共享CPU資源,僅512MB內存和最高2GB存儲,難以支撐實時性能或數據增長;其次,缺乏高可用架構如多節點副本集和自動故障轉移,維護或故障期間可能導致服務中斷;再者,每小時讀寫操作受限,連接數和帶寬也受限制,輕度流量即可觸發限流;最後,備份功能受限,存儲上限易因索引或文件存儲迅速耗盡,因此僅適用於演示或小型個人項目。

Mongodb Atlas vs.自託管MongoDB:哪個適合您? Mongodb Atlas vs.自託管MongoDB:哪個適合您? Jul 30, 2025 am 12:50 AM

MongoDBAtlas更適合小團隊或缺乏DBA資源的組織,因它提供全自動管理、快速部署和內置安全;2.成本上Atlas初期透明易預算,但用量大後可能高於自託管,後者雖基礎設施費低卻需計入人力與風險成本;3.安全合規方面Atlas默認企業級配置並自動更新,自託管需手動實現且易出錯;4.所需控制力強、有定制需求或數據主權限制時選自託管,否則多數團隊應首選Atlas以聚焦產品開發而非運維,此選擇最省時可靠並支持未來靈活調整。

MongoDB的交易是什麼,它們如何為多文檔操作提供酸性? MongoDB的交易是什麼,它們如何為多文檔操作提供酸性? Jul 31, 2025 am 06:25 AM

MongoDBintroducedmulti-documenttransactionsinversion4.0,enablingatomicoperationsacrosscollectionsforstrongconsistency.Transactionsallowmultipleread/writeoperationstobegroupedasasingleunit,eitherallsucceedingorfailingtogether.Theyaresupportedinreplica

備份和恢復MongoDB數據庫的最佳實踐 備份和恢復MongoDB數據庫的最佳實踐 Jul 27, 2025 am 12:33 AM

Usemongodumpandmongorestoreforlogicalbackups,preferablyonsecondarynodeswithcompressionandproperoptionsforrolesandcollections.2.Forlargeorproductionsystems,usefilesystemsnapshotslikeLVMorAWSEBSbystoppingthesecondarynodetoensureconsistencyandcapturedat

工作集的意義是什麼?它與RAM容量有何關係? 工作集的意義是什麼?它與RAM容量有何關係? Jul 17, 2025 am 12:20 AM

TheworkingsetdirectlyimpactssystemperformancebecauseifitexceedsavailableRAM,thesystemslowsdownduetopaging.1)Theworkingsetconsistsofactivedataandinstructionsfromrunningprograms,notjustopenapps.2)Itdynamicallychangesbasedoncurrenttasksandincludesbothco

連接匯總如何與MongoDB驅動程序一起使用,為什麼很重要? 連接匯總如何與MongoDB驅動程序一起使用,為什麼很重要? Jul 16, 2025 am 01:30 AM

mongodbconnectionpoolworksbymaintainingreusabledatabaseconnectionstoimproveperformance.1)dreversCreateInitialConnectionsAppStarpStart.2)aqueryruns,anidleConnection istromtheStrakeTaken fromthepool.3)fromShepool.3)afteruse,theconnection reterternternternternternternterntertotertoptothepoodepoolsepool.4.4)

了解MongoDB存儲引擎:Wiredtiger Deep Dive 了解MongoDB存儲引擎:Wiredtiger Deep Dive Aug 04, 2025 am 05:49 AM

WiredTigerisMongoDB’sdefaultstorageenginesinceversion3.2,providinghighperformance,scalability,andmodernfeatures.1.Itusesdocument-levellockingandMVCCforhighconcurrency,allowingreadsandwritestoproceedwithoutblockingeachother.2.DataisstoredusingB-trees,

_id字段在mongoDB文檔中的作用是什麼?通常如何生成? _id字段在mongoDB文檔中的作用是什麼?通常如何生成? Jul 16, 2025 am 01:33 AM

在MongoDB中,\_id字段用作集合中文檔的主鍵,默認使用ObjectId生成,確保唯一性。若不手動指定,MongoDB會自動生成\_id,其結構包括時間戳、機器標識、進程ID和計數器,保證跨系統唯一性。雖然碰撞罕見,但在高寫入場景下仍有可能發生。常見自定義\_id場景包括使用電子郵件、復用其他系統的數字ID或UUID,但需確保唯一且不可更改。 MongoDB對\_id自動創建唯一索引,提升查詢效率,但自定義\_id時需注意寫擴展性和索引存儲效率問題,如遞增ID可能導致分片寫瓶頸,隨機UUID

See all articles