MongoDB復制集


 1.1 MongoDB復制集簡介

  一組Mongodb復制集,就是一組mongod進程,這些進程維護同一個數據集合。復制集提供了數據冗余和高等級的可靠性,這是生產部署的基礎。

1.1.1 復制集的目的

  保證數據在生產部署時的冗余和可靠性,通過在不同的機器上保存副本來保證數據的不會因為單點損壞而丟失。能夠隨時應對數據丟失、機器損壞帶來的風險。

  換一句話來說,還能提高讀取能力,用戶的讀取服務器和寫入服務器在不同的地方,而且,由不同的服務器為不同的用戶提供服務,提高整個系統的負載。

1.1.2 簡單介紹

  一組復制集就是一組mongod實例掌管同一個數據集,實例可以在不同的機器上面。實例中包含一個主導,接受客戶端所有的寫入操作,其他都是副本實例,從主服務器上獲得數據並保持同步。

  主服務器很重要,包含了所有的改變操作(寫)的日志。但是副本服務器集群包含有所有的主服務器數據,因此當主服務器掛掉了,就會在副本服務器上重新選取一個成為主服務器。

  每個復制集還有一個仲裁者,仲裁者不存儲數據,只是負責通過心跳包來確認集群中集合的數量,並在主服務器選舉的時候作為仲裁決定結果。

1.2 復制的基本架構

  基本的架構由3台服務器組成,一個三成員的復制集,由三個有數據,或者兩個有數據,一個作為仲裁者。

1.2.1 三個存儲數據的復制集

具有三個存儲數據的成員的復制集有:

一個主庫;

兩個從庫組成,主庫宕機時,這兩個從庫都可以被選為主庫。

      當主庫宕機后,兩個從庫都會進行競選,其中一個變為主庫,當原主庫恢復后,作為從庫加入當前的復制集群即可。

1.2.2 當存在arbiter節點

在三個成員的復制集中,有兩個正常的主從,及一台arbiter節點:

    一個主庫

    一個從庫,可以在選舉中成為主庫

    一個aribiter節點,在選舉中,只進行投票,不能成為主庫

說明:

  由於arbiter節點沒有復制數據,因此這個架構中僅提供一個完整的數據副本。arbiter節點只需要更少的資源,代價是更有限的冗余和容錯。

   當主庫宕機時,將會選擇從庫成為主,主庫修復后,將其加入到現有的復制集群中即可。

1.2.3 Primary選舉

  復制集通過replSetInitiate命令(或mongo shell的rs.initiate())進行初始化,初始化后各個成員間開始發送心跳消息,並發起Priamry選舉操作,獲得『大多數』成員投票支持的節點,會成為Primary,其余節點成為Secondary。

『大多數』的定義

  假設復制集內投票成員(后續介紹)數量為N,則大多數為 N/2 + 1,當復制集內存活成員數量不足大多數時,整個復制集將無法選舉出Primary,復制集將無法提供寫服務,處於只讀狀態。

投票成員數

大多數

容忍失效數

1

1

0

2

2

0

3

2

1

4

3

1

5

3

2

6

4

2

7

4

3

  通常建議將復制集成員數量設置為奇數,從上表可以看出3個節點和4個節點的復制集都只能容忍1個節點失效,從『服務可用性』的角度看,其效果是一樣的。(但無疑4個節點能提供更可靠的數據存儲)

1.3 復制集中成員說明

1.3.1 所有成員說明 

成員

說明

Secondary

正常情況下,復制集的Seconary會參與Primary選舉(自身也可能會被選為Primary),並從Primary同步最新寫入的數據,以保證與Primary存儲相同的數據。

Secondary可以提供讀服務,增加Secondary節點可以提供復制集的讀服務能力,同時提升復制集的可用性。另外,Mongodb支持對復制集的Secondary節點進行靈活的配置,以適應多種場景的需求。

Arbiter

Arbiter節點只參與投票,不能被選為Primary,並且不從Primary同步數據。

比如你部署了一個2個節點的復制集,1個Primary,1個Secondary,任意節點宕機,復制集將不能提供服務了(無法選出Primary),這時可以給復制集添加一個Arbiter節點,即使有節點宕機,仍能選出Primary。

Arbiter本身不存儲數據,是非常輕量級的服務,當復制集成員為偶數時,最好加入一個Arbiter節點,以提升復制集可用性。

Priority0

Priority0節點的選舉優先級為0,不會被選舉為Primary

比如你跨機房A、B部署了一個復制集,並且想指定Primary必須在A機房,這時可以將B機房的復制集成員Priority設置為0,這樣Primary就一定會是A機房的成員。

(注意:如果這樣部署,最好將『大多數』節點部署在A機房,否則網絡分區時可能無法選出Primary)

Vote0

Mongodb 3.0里,復制集成員最多50個,參與Primary選舉投票的成員最多7個,其他成員(Vote0)的vote屬性必須設置為0,即不參與投票。

Hidden

Hidden節點不能被選為主(Priority為0),並且對Driver不可見。因Hidden節點不會接受Driver的請求,可使用Hidden節點做一些數據備份、離線計算的任務,不會影響復制集的服務。

Delayed

Delayed節點必須是Hidden節點,並且其數據落后與Primary一段時間(可配置,比如1個小時)。

因Delayed節點的數據比Primary落后一段時間,當錯誤或者無效的數據寫入Primary時,可通過Delayed節點的數據來恢復到之前的時間點。

 

 更多的見原貼:https://www.cnblogs.com/clsn/p/8214345.html#auto_id_0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM