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:password@host1: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:testuserpwd@172.177.177.xx1:27017,172.177.177.xx2:27017/mongotestdb?replicaSet=reptest";
注意:因為仲裁節點沒有數據副本,仲裁節點也不可能會被選舉為主節點,所以連接字符串信息中不要包含仲裁節點的信息。
[說明:本文副本集相關圖片來自網絡,在此感謝原創作者。]