mongodb集羣-副本集(CSRS)

一、概述

(1)MongoDB複製是將數據同步在多個服務器的過程。

(2)複製提供了數據的冗餘備份,並在多個服務器上存儲數據副本,提高了數據的可用性, 並可以保證數據的安全性。

(3)複製還允許您從硬件故障和服務中斷中恢復數據。

注意:MongoDB Atlas上託管的所有數據庫都配置爲副本集。Atlas可以輕鬆添加和刪除首選雲提供商的任何區域中的副本集成員;副本集提供冗餘和高可用性,是所有生產部署的基礎。

1、冗餘和數據可用性

複製提供冗餘並提高數據可用性。通過在不同數據庫服務器上提供多個數據副本,複製可提供一定程度的容錯能力,以防止丟失單個數據庫服務器。

在某些情況下,複製可以提供增加的讀取容量,因爲客戶端可以將讀取操作發送到不同的服 在不同數據中心維護數據副本可以增加分佈式應用程序的數據位置和可用性。您還可以爲專用目的維護其他副本,例如災難恢復,報告或備份。

2、MongoDB複製原理

(1)mongodb的複製至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其餘的都是從節點,負責複製主節點上的數據。

(2)mongodb各個節點常見的搭配方式爲:一主一從、一主多從。

(3)主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然後對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。

MongoDB複製結構圖如下所示:

1.png

以上結構圖中,客戶端從主節點讀取數據,在客戶端寫入數據到主節點時, 主節點與從節點進行數據交互保障數據的一致性。

副本集特徵:

(1)N 個節點的集羣

(2)任何節點可作爲主節點

(3)所有寫入操作都在主節點上

(4)自動故障轉移

(5)自動恢復

3、副本集成員

(1)primary:主服務器是副本集中唯一接收寫入操作的成員。MongoDB在主服務器上應用寫操作,然後在主服務器的oplog上記錄操作。輔助成員複製此日誌並將操作應用於其數據集。

(2)secondary:輔助節點從主節點複製操作以維護相同的數據集。輔助節點可能具有特殊使用配置文件的其他配置。例如:輔助可以是非投票或 優先級0

1)優先級0副本集成員

不能成爲主要的和不能觸發 選舉。除此之外,具有 正常輔助功能的輔助設備:它們維護數據集的副本,接受讀取操作,並在選舉中投票。

2)隱藏副本集成員

隱藏成員維護主 數據集的副本,但對客戶端應用程序不可見。隱藏成員適用於具有與副本集中其他成員不同的使用模式的工作負載。隱藏成員必須始終 優先爲0成員,因此不能成爲主要成員。該db.isMaster()方法不顯示隱藏的成員。然而,隱藏的成員可能會在 選舉中投票。

備註:在分片羣集中,mongos不要與隱藏成員交互。

3)延遲副本集成員

延遲成員包含副本集數據集的副本。但是,延遲成員的數據集反映了該集合的早期或延遲狀態。

注意事項:

要求:

必須是 優先級爲0的 成員。將優先級設置爲0以防止延遲成員成爲主要成員。

應該是 隱藏的 成員。始終阻止應用程序查看和查詢延遲的成員。

做到在投票選舉爲primary,若members[n].votes設置爲1。

行爲:

延遲成員在延遲時從源oplog複製和應用操作。在選擇延遲量時,請考慮延遲量:

必須等於或大於預期的維護窗口持續時間。

必須小於 oplog的容量。

(3)arbiter:仲裁器不具有數據集的副本,並不能成爲主要的。副本集可能有仲裁者在主要選舉中添加投票 。仲裁者 總是擁有恰當的1選舉投票,因此允許副本集具有不均勻的投票成員數,而不會產生複製數據的額外成員的開銷。

補充:

副本集的最小建議配置是三個成員副本集,其中包含三個數據承載成員:一個主成員和兩個輔助成員。您也可以部署具有兩個數據承載成員的三成員副本集:主要成員,輔助成員 和仲裁者,但具有至少三個數據承載成員的副本集提供更好的冗餘。

副本集最多可包含50個成員,但只有7個投票成員。

二、mongodb集羣(副本集模式)

1、數據庫環境

主機名

數據庫IP地址

數據庫版本

端口

用途

系統

SQL_jiangjj

192.168.56.147

mongodb4.0.3

27017

primary(主)

cenots7.4

node01

192.168.56.242

mongodb4.0.3

27017

secondary(備)

centos7.4

node01

192.168.56.245

mongodb4.0.3

27017

arbiter(仲裁)

centos7.5

2、暫時關閉防火牆和seliunx,測試完畢再開啓安全規則

3、下載mongdb包

官方地址:https://www.mongodb.com/download-center/v2/community

4、上傳包解壓並創建目錄

(1)解壓

# tar -zxvf mongodb-linux-x86_64-rhel70-4.0.3.tgz

# mv mongodb-linux-x86_64-rhel70-4.0.3 mongodb

2.png

同樣的,在node01和node02上也解壓並改名(略)

(2)創建目錄

[root@SQL_jiangjj ~]# mkdir -p /home/mongodb/primary

[root@SQL_jiangjj ~]# mkdir -p /etc/mongodb/

[root@node01 ~]# mkdir -p /home/mongodb/secondary/

[root@node01 ~]# mkdir -p /etc/mongodb/

[root@node02 ~]# mkdir -p /home/mongodb/arbiter/

[root@node02 ~]# mkdir -p /etc/mongodb/

5、新建配置文件

參數詳細說明:https://my.oschina.net/pwd/blog/399374

(1)主配置文件

# vim /etc/mongodb/primary.conf

#PRIMARY.CONF

dbpath=/home/mongodb/primary

logpath=/home/mongodb/primary.log

pidfilepath=/home/mongodb/primary.pid

#keyFile=/home/mongodb/mongodb.key  //節點間用戶驗證文件,內容必須一致,權限600,僅副本集模式有效

directoryperdb=true   //數據庫是否分目錄存放

logappend=true        //日誌追加方式存放

replSet=google        //Replica set的名字

bind_ip=192.168.56.147

port=27017

#auth=true

oplogSize=100    //設置oplog的大小,單位MB

fork=true            //啓動到後臺,守護進程方式啓動

noprealloc=true

#maxConns=4000

3.png

(2)備節點

[root@node01 ~]# cat /etc/mongodb/secondary.conf

4.png

(3)仲裁節點

5.png

6、啓動服務

# ./mongodb/bin/mongod -f /etc/mongodb/primary.conf

6.png

[root@node01 ~]# ./mongodb/bin/mongod -f /etc/mongodb/secondary.conf

[root@node02 ~]# ./mongodb/bin/mongod -f /etc/mongodb/arbiter.conf

7、將節點配置組成集羣

在任意節點啓動配置,這裏使用SQL_jiangjj節點

登錄數據庫

[root@SQL_jiangjj ~]# ./mongodb/bin/mongo 192.168.56.147:27017

> use admin

> cfg={ _id:"google",members:[{_id:0,host:'192.168.56.147:27017',priority:2},{_id:1,host:'192.168.56.242:27017',priority:1},{_id:2,host:'192.168.56.245:27017',arbiterOnly:true}] };

7.png

#配置生效命令

> rs.initiate(cfg)

8.png

說明:

(1)cfg名字可選,只要跟mongodb參數不衝突,_id爲Replica Set名字,members裏面的優先級priority值高的爲主節點;

(2)對於仲裁點一定要加上arbiterOnly:true,否則主備模式不生效。

# 查看是否生效:> rs.status()

下面會顯示字樣:"ok" : 1

8、測試

(1)新建庫

> use jiangjj

(2)插入文檔

> db.jiangjj.insert({"name":"jiangjj"},{"titile":"標題行"},{"content":"副本集測試"})

9.png

查看兩個節點數據

10.png

備註:重啓系統後服務不會自啓,如需請自行配置開啓自啓即可


三、副本集用戶驗證設置

1、創建驗證祕鑰文件

keyFile文件的作用: 集羣之間的安全認證,增加安全認證機制KeyFile(開啓keyfile認證就默認開啓了auth認證了,爲了保證後面可以登錄,我已創建了用戶)

#  touch .keyFile

#  chmod 600 .keyFile

# openssl rand -base64 102 > .keyFile

102:是文件大小

注意:創建keyFile前,需要先停掉副本集中所有主從節點的mongod服務,然後再創建,否則有可能出現服務啓動不了的情況。

2、在主副本上添加兩個用戶

user01:PRIMARY> use admin

1.png

user01:PRIMARY> use jiangjj

2.png

3、更新所有節點配置文件

keyFile=/home/data/.keyFile

auth=true

4、啓動副本集,測試

登錄驗證

root用戶

3.png

查看數據

4.png

驗證jiangjj用戶

5.png

權限配置詳細請參考官方文檔


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章