MongoDB副本集及C#程式的連線配置
1.副本集
高可用是絕大多數資料庫管理系統的核心目標之一。如果要想生產資料在發生故障後依然可用,就需要確保為生產資料庫多部署一臺伺服器。MongoDB副本集提供了資料的保護、高可用和災難恢復的機制。 在MongoDB中,有兩種資料冗餘方式,一種是 Master-Slave 模式(主從複製),一種是 Replica Sets 模式(副本集)。主從複製和副本集使用了相同的複製機制,但是副本集額外增加了自動化災備機制:如果主節點宕機,其中一個從節點會自動提升為從節點。除此之外,副本集還提供了其他改進,比如更易於恢復和更復雜地部署拓撲網路。
叢集中沒有特定的主庫,主庫是選舉產生,如果主庫down了,會再選舉出一臺主庫。
可複製集推薦使用的最小配置包含3個節點,因為在可複製集裡如果只有2個節點,那麼一旦主節點垮掉,就無法進行多數投票表決。在3個成員的可複製集裡可部署包含3個儲存資料的節點伺服器,其節點示意圖如下:
也可以是2個數據儲存伺服器加上一個裁判伺服器,其節點示意圖如下:
(一主一副一仲裁)
目前,作者所在公司建立的叢集大多采用後者架構。
2.MongoDB.Driver
下圖是C#的MongoDB.Driver驅動版本與MongoDB版本支援關係,目前安裝的MongoDB版本都是3.4.4 及以上版本。所以MongoDB.Driver版本應該選用2.4 及以上。
3.連線字串格式
副本集連線字串格式
mongodb://username:[email protected]:port1,host2:port2[,...,hostN:portN]/database?options
options是連線配置中的可選項,replicaSet是其中的一個子項。
下面我們舉一個例子來說明字串是怎麼配置的,測試環境的副本集資訊如下:
副本集名稱 |
節點角色 |
節點IP |
埠 |
repsms |
主伺服器 |
172.177.177.XX1 |
27017 |
副本節點 |
172.177.177.XX2 |
27017 |
|
仲裁節點 |
172.177.177.XX3 |
27017 |
賬號資訊如下:
Username |
Password |
DBName |
mongousertest |
testuserpwd |
mongotestdb |
此時C#程式中connectionStr的字串可以設定如下:
stringconnectionStr = "mongodb://mongousertest:[email protected]:27017,172.177.177.xx2:27017/mongotestdb?replicaSet=reptest";
注意:因為仲裁節點沒有資料副本,仲裁節點也不可能會被選舉為主節點,所以連線字串資訊中不要包含仲裁節點的資訊。
[說明:本文副本集相關圖片來自網路,在此感謝原創作者。]