首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

MongoDB 主從複制 (Master-Slave) 搭建與 Oplog 深度解析

     編輯:DB2 教學

主從複制架構簡介

Master-Slave 模式:主節點寫入,從節點非同步複製。優點是簡單易建立、自動同步;缺點是從節點無法自動升主 (需人工介入),且單主寫入擴展性有限。生產環境建議使用 Replica Set 取代。

單機雙實例模擬搭建

# 建立資料目錄
mkdir master slave

# 啟動主節點 (port 10000)
mongod --dbpath E:\masterslave\master --port 10000 --master

# 啟動從節點 (port 10001)
mongod --dbpath E:\masterslave\slave --port 10001 --slave --source localhost:10000
需開啟兩個獨立命令視窗分別啟動。

驗證複制效果

  1. 連線主節點:mongo --port 10000
  2. 切換/建立資料庫:use my
  3. 插入測試資料:db.my.insert({name:"test"})
  4. 連線從節點:mongo --port 10001
  5. 查詢驗證:use my; db.my.find() → 應出現同樣資料
從節點唯讀,執行寫入操作將報錯。

Oplog (操作日誌) 深度解析

複制機制核心:主節點將寫入操作記錄至 local.oplog.$main 集合,從節點輪詢並重放。

Oplog 文件結構

欄位類型說明
tsTimestamp (8 bytes)4 bytes Unix 時間 + 4 bytes 遞增計數。選舉新 Primary 時選 ts 最大者。
opchar (1 byte)操作類型:i=insert, u=update, d=delete, c=cmd, n=no-op
nsstring命名空間:database.collection
odocument操作內容 (insert 為新文件,update 為修改後文件/$set 等)
o2document僅 update 時存在:查詢條件 (where clause)

實際 Oplog 範例

// Insert
{ "ts": Timestamp(1387368754, 1), "op": "i", "ns": "my.my", "o": { "_id": ObjectId("..."), "name": "test" } }

// Delete
{ "ts": Timestamp(...), "op": "d", "ns": "my.my", "o": { "_id": ObjectId("...") } }

// Update
{ "ts": Timestamp(...), "op": "u", "ns": "my.my", "o": { "$set": { "age": 30 } }, "o2": { "_id": ObjectId("...") } }

Shell 實用技巧

  • Tab 鍵自動補全指令/集合名/欄位名
  • 直接輸入函式名不加括號可查看原始碼/API:db.my.update
  • Shell 內建 JavaScript 支援:for(var i=0;i<3;i++){db.my.insert({name:"test",age:18})}

下一步:Replica Set (副本集)

支援自動故障轉移、多節點選舉、讀寫分離,是生產環境標準部署架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved