上一章節中,我們詳細介紹了在典型的三節點複製集環境中搭建MongoDB的步驟和注意事項。從準備組態檔到啟動MongoDB程序,我們一步步指導讀者完成了環境的設定。在本章節中,我們將進一步深入,重點講解如何進行復制集的設定和安全驗證,以及連線方式的選擇。通過學習這些內容,讀者將能夠更好地理解和應用MongoDB的複製集功能,確保資料的可靠性和安全性。
在複製集中,可以通過使用replSetInitiate命令或mongo shell的rs.initiate()方法來進行初始化。一旦初始化完成,各個成員之間會開始傳送心跳訊息,並進行Primary選舉操作。在此過程中,節點需要獲得足夠多成員的投票支援,才能成為Primary節點,而其他節點則會成為Secondary節點。
方法1:
#mongo ‐‐port 28017
# 初始化複製集
> rs.initiate()
# 將其餘成員新增到複製集
> rs.add("192.168.65.174:28018")
> rs.add("192.168.65.174:28019")
方法2:
# mongo ‐‐port 28017
# 初始化複製集
> rs.initiate({
_id: "rs0",
members: [{
_id: 0,host: "192.168.65.174:28017"
},{
_id: 1,host: "192.168.65.174:28018"
},{
_id: 2,host: "192.168.65.174:28019"
}]
})
MongoDB 主節點進行寫入
# mongo ‐‐port 28017
rs0:PRIMARY> db.user.insert([{name:"xiaoyu"},{name:"monkey"}])
MongoDB 從節點進行讀
# mongo ‐‐port 28018
# 指定從節點可讀
rs0:SECONDARY> rs.secondaryOk()
rs0:SECONDARY> db.user.find()
檢視最新複製集整體狀態:
rs.status()
在複製集中,可以檢視各成員的當前狀態,以瞭解它們是否健康、是否在進行全量同步、心跳資訊、增量同步資訊、選舉資訊以及上一次的心跳時間等。通過這些資訊,您可以監控和評估複製集的執行狀況。
在複製集中,通過檢視"members"欄位,可以獲得關於所有成員的狀態資訊。這些資訊可以幫助我們判斷成員的健康狀況,瞭解它們是否在進行全量同步,以及其他相關資訊。下面是一些主要的狀態列位的解釋:
檢視當前節點角色:
db.isMaster()
除了當前節點的角色資訊,你可以通過傳送一個特定的命令來獲取更詳細的資訊,包括整個複製集的成員列表、真正的主節點(Primary)是誰以及與複製集相關的協定設定資訊等。Driver 在首次連線複製集時會傳送該命令。
Mongo Shell
複製集命令
命令 | 描述 |
---|---|
rs.add() | 為複製集新增節點 |
rs.addArb() | 為複製集新增一個 arbiter |
rs.conf() | 返回複製集設定資訊 |
rs.freeze() | 防止當前節點在一段時間內選舉成為主節點 |
rs.help() | 返回 replica set 的命令幫助 |
rs.initiate() | 初始化一個新的複製集 |
rs.printReplicationInfo() | 以主節點的視角返回複製的狀態報告 |
rs.printSecondaryReplicationInfo() | 以從節點的視角返回複製狀態報告 |
rs.reconfig() | 通過重新應用複製集設定來為複製集更新設定 |
rs.remove() | 從複製集中移除一個節點 |
rs.secondaryOk() | 為當前的連線設定 從節點可讀 |
rs.status() | 返回複製集狀態資訊。 |
rs.stepDown() | 讓當前的 primary 變為從節點並觸發 election |
rs.syncFrom() | 設定複製集節點從哪個節點處同步資料,將會覆蓋預設選取邏輯 |
在主節點伺服器上,啟動mongo
use admin
#建立使用者
db.createUser( {
user: "xiaoyu",
pwd: "xiaoyu",
roles: [ { role: "clusterAdmin", db: "admin" } ,
{ role: "userAdminAnyDatabase", db: "admin"},
{ role: "userAdminAnyDatabase", db: "admin"},
{ role: "readWriteAnyDatabase", db: "admin"}]
})
KeyFile檔案在MongoDB叢集中的作用是提供安全認證機制。它用於在叢集節點之間進行身份驗證,以增加叢集的安全性。(開啟keyfile認證就預設開啟了auth認證了)。
#mongo.key採用隨機演演算法生成,用作節點內部通訊的金鑰檔案。
openssl rand ‐base64 756 > /data/mongo.key
#許可權必須是600
chmod 600 /data/mongo.key
在進行復制集的初始化之前,請確保先停止所有主從節點上的mongod服務。然後,建立一個名為keyFile的檔案,並將其拷貝到複製集的其他從節點伺服器上。在複製集的每個從節點上,將keyFile檔案的路徑地址設定到mongo.conf組態檔中的keyFile欄位,並設定keyFile檔案的許可權為600。最後,啟動mongod服務。這樣做的目的是為了確保keyFile檔案能夠被所有節點正確存取,並提供必要的安全認證機制。
# 啟動mongod
mongod ‐f /data/db1/mongod.conf ‐‐keyFile /data/mongo.key
mongod ‐f /data/db2/mongod.conf ‐‐keyFile /data/mongo.key
mongod ‐f /data/db3/mongod.conf ‐‐keyFile /data/mongo.key
1 #進入主節點
2 mongo ‐‐port 28017
1 #進入主節點
2 mongo ‐‐port 28017 ‐uxiaoyu ‐pxiaoyu ‐‐authenticationDatabase=admin
方式一:在連線複製集時直接連線到主節點(Primary),並且在正常情況下可以進行讀寫操作,但一旦主節點發生故障切換,你無法正常存取資料庫,
方式二(強烈推薦):通過使用高可用URI連線到MongoDB,當主節點發生故障切換時,MongoDB驅動程式可以自動感知並將流量路由到新的主節點。這種方式可以提供更高的可用性和自動故障轉移。
springboot操作複製集設定
spring:
data:
mongodb:
uri:
mongodb://xiaoyu:[email protected]:28017,192.168.65.174:28018,192.168.65.174:28019/test?authSource=admin&replicaSet=rs0
本章介紹了MongoDB複製集的設定和使用方法。首先,我們學習瞭如何初始化和新增節點到複製集,並驗證了主節點的寫入和從節點的讀取功能。然後,我們瞭解瞭如何查詢複製集的狀態,包括成員的健康狀況、同步資訊和角色等。最後,我們介紹瞭如何設定複製集的安全認證,包括建立使用者和生成keyFile檔案,並演示了使用認證資訊連線複製集的方式。通過本章的學習,你將掌握MongoDB複製集的基本使用和設定方法。