本章介紹了MongoDB複製集的配置和使用方法,如何初始化和添加節點到複製集,驗證主節點的寫入和從節點的讀取功能。瞭解如何查詢複製集的狀態,包括成員的健康狀況、同步信息和角色等。最後,我們介紹瞭如何配置複製集的安全認證,包括創建用戶和生成keyFile文件,並演示了使用認證信息連接複製集的方式。通過... ...
引言
上一章節中,我們詳細介紹了在典型的三節點複製集環境中搭建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"欄位,可以獲得關於所有成員的狀態信息。這些信息可以幫助我們判斷成員的健康狀況,瞭解它們是否在進行全量同步,以及其他相關信息。下麵是一些主要的狀態欄位的解釋:
- health:表示成員是否健康,這是通過心跳檢測來確定的。
- state/stateStr:表示成員的狀態。如果成員是主節點,則狀態為PRIMARY;如果成員是備用節點,則狀態為SECONDARY。當節點發生故障時,可能會出現一些其他的狀態,例如RECOVERY。
- uptime:表示成員的啟動時間,即成員運行的時間。
- optime/optimeDate:表示成員最後一次同步oplog的時間。oplog是MongoDB中的操作日誌,用於在複製集中同步數據變更。
- optimeDurable/optimeDurableDate:表示成員最後一次同步oplog的時間,這個時間是持久的,即該時間點之前的所有數據變更已經被持久化到磁碟上。
- pingMs:表示成員與當前節點之間的ping時延,即網路延遲。
- syncingTo:表示成員正在從哪個節點進行同步操作,即同步來源。
查看當前節點角色:
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文件
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複製集的基本使用和配置方法。