MongoDB複製集

 1.1 MongoDB複製集簡介

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

1.1.1 複製集的目的

  保證數據在生產部署時的冗餘和可靠性,經過在不一樣的機器上保存副原本保證數據的不會由於單點損壞而丟失。可以隨時應對數據丟失、機器損壞帶來的風險。shell

  換一句話來講,還能提升讀取能力,用戶的讀取服務器和寫入服務器在不一樣的地方,並且,由不一樣的服務器爲不一樣的用戶提供服務,提升整個系統的負載。服務器

1.1.2 簡單介紹

  一組複製集就是一組mongod實例掌管同一個數據集,實例能夠在不一樣的機器上面。實例中包含一個主導,接受客戶端全部的寫入操做,其餘都是副本實例,從主服務器上得到數據並保持同步。網絡

  主服務器很重要,包含了全部的改變操做(寫)的日誌。可是副本服務器集羣包含有全部的主服務器數據,所以當主服務器掛掉了,就會在副本服務器上從新選取一個成爲主服務器。架構

  每一個複製集還有一個仲裁者,仲裁者不存儲數據,只是負責經過心跳包來確認集羣中集合的數量,並在主服務器選舉的時候做爲仲裁決定結果。併發

1.2 複製的基本架構

  基本的架構由3臺服務器組成,一個三成員的複製集,由三個有數據,或者兩個有數據,一個做爲仲裁者。spa

1.2.1 三個存儲數據的複製集

具備三個存儲數據的成員的複製集有:日誌

一個主庫;htm

兩個從庫組成,主庫宕機時,這兩個從庫均可以被選爲主庫。blog

      當主庫宕機後,兩個從庫都會進行競選,其中一個變爲主庫,當原主庫恢復後,做爲從庫加入當前的複製集羣便可。

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

相關文章
相關標籤/搜索