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

MongoDB 複製集搭建實戰指南(二):從啟動到故障測試全流程

     編輯:DB2 教學

MongoDB 複製集搭建實戰指南(二):從啟動到故障測試全流程

承接上一篇理論基礎,本文將詳細記錄 MongoDB 3.0.1 在 CentOS 6.5 環境下,三節點複製集的完整搭建、初始化與故障切換測試過程。所有操作均在單機多端口模式下進行,生產環境請部署於不同物理機或虛擬機。

一、 環境準備與參數規劃

  • 作業系統:CentOS 6.5 64 位
  • MongoDB 版本:3.0.1 64 位
  • 複製集名稱:repl
  • 節點規劃(均部署於 192.168.66.89):
    • 節點 1(Primary 候選):Port 40144,數據目錄 /data/mongodb3.0.1/data/
    • 節點 2:Port 50144,數據目錄 /data/mongodb3.0.1/db_50144/
    • 節點 3:Port 60144,數據目錄 /data/mongodb3.0.1/db_60144/

二、 啟動三個 mongod 實例

使用 --replSet 參數指定複製集名稱及種子節點,--fork 後台運行,--logappend 日誌追加模式。關鍵參數說明:

參數用途
--oplogSize操作日誌大小(默認磁盤剩餘 5%)
--dbpath數據文件路徑
--logpath日誌文件路徑
--port服務端口(默認 27017)
--replSet格式:複製集名/種子節點IP:端口
--maxConns最大連接數
--directoryperdb每個數據庫獨立目錄
# 節點 1
/usr/local/mongodb3.0.1/bin/mongod --port 40144 \
  --dbpath=/data/mongodb3.0.1/data/ \
  --logpath=/data/mongodb3.0.1/log/mongodb.log \
  --directoryperdb --maxConns 100 --logappend \
  --replSet repl/192.168.66.89:50144 --fork

# 節點 2
/usr/local/mongodb3.0.1/bin/mongod --port 50144 \
  --dbpath=/data/mongodb3.0.1/db_50144/ \
  --logpath=/data/mongodb3.0.1/db_50144/mongodb.log \
  --directoryperdb --maxConns 100 --logappend \
  --replSet repl/192.168.66.89:40144 --fork

# 節點 3
/usr/local/mongodb3.0.1/bin/mongod --port 60144 \
  --dbpath=/data/mongodb3.0.1/db_60144/ \
  --logpath=/data/mongodb3.0.1/db_60144/mongodb.log \
  --directoryperdb --maxConns 100 --logappend \
  --replSet repl/192.168.66.89:40144 --fork

三、 初始化複製集

任選一個節點(此處連接 40144)進入 Shell,切換到 admin 數據庫並執行 replSetInitiate 命令。注意 _id: "repl" 必須與啟動參數 --replSet repl 完全一致。

> use admin
switched to db admin

> db.runCommand({
    "replSetInitiate": {
      "_id": "repl",
      "members": [
        {"_id": 1, "host": "192.168.66.89:40144"},
        {"_id": 2, "host": "192.168.66.89:50144"},
        {"_id": 3, "host": "192.168.66.89:60144"}
      ]
    }
  })
{ "ok" : 1 }

四、 驗證集群狀態

執行 db._adminCommand("replSetGetStatus") 可見:節點 1 當選 Primary(stateStr: "PRIMARY"),節點 2、3 為 Secondary(stateStr: "SECONDARY"),健康值均為 1,複製集已正常形成。

五、 功能與故障切換測試

1. 主節點寫入、從節點讀取

repl:PRIMARY> use mtdamai
repl:PRIMARY> db.user.insert({name:"wangxiuli"})
WriteResult({ "nInserted" : 1 })

# 從節點需開啟讀取權限
repl:SECONDARY> rs.slaveOk()
repl:SECONDARY> db.user.find()
{ "_id" : ObjectId("..."), "name" : "wangxiuli" }

數據已自動同步至 Secondary,驗證複製功能正常。

2. 模擬 Primary 故障,觀察自動選舉

停止 Port 40144 進程,再次執行 rs.status():

  • 節點 1 狀態變為 (not reachable/healthy)
  • 節點 2 升級為 Primary(electionTime 顯示選舉時間)
  • 節點 3 保持 Secondary,同步來源指向新 Primary

向新 Primary 寫入數據,再驗證 Secondary 可讀,確認故障切換無縫完成。

3. 故障節點恢復

重新啟動 Port 40144 實例,該節點自動加入集群並成為 Secondary,通過 rs.status() 可見其 syncingTo 指向當前 Primary,數據已追平。

六、 關鍵運維提示

  1. 種子節點列表:生產環境建議在 --replSet 後列出至少兩個節點,防單點故障。
  2. 防火牆/安全組:確保節點間端口互通(默認 27017 或自定義端口)。
  3. Oplog 窗口:根據寫入量規劃 --oplogSize,避免 Secondary 落後過多需全量重同步。
  4. 讀寫分離:應用端讀操作可導向 Secondary(需 readPreference: secondaryPreferred),寫操作必須發送給 Primary。

至此,MongoDB 複製集從搭建、初始化到故障演練全流程驗證通過,可作為生產環境部署參考依據。

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