天天看點

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

高可用性即HA(High Availability)指的是通過盡量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導緻的停機時間,以提高系統和應用的可用性。

計算機系統的高可用在不同的層面上有不同的表現:

(1)網絡高可用

由于網絡存儲的快速發展,網絡備援技術被不斷提升,提高IT系統的高可用性的關鍵應用就是網絡高可用性,網絡高可用性與網絡高可靠性是有差別的,網絡高可用性是通過比對備援的網絡裝置實作網絡裝置的備援,達到高可用的目的。

比如備援的交換機,備援的路由器等

(2)伺服器高可用

伺服器高可用主要使用的是伺服器叢集軟體或高可用軟體來實作。

(3)存儲高可用

使用軟體或硬體技術實作存儲的高度可用性。其主要技術名額是存儲切換功能,資料複制功能,資料快照功能等。當一台存儲出現故障時,另一台備用的存儲可以快速切換,達一存儲不停機的目的。

高可用叢集,即High Availability Cluster,簡稱HA Cluster。

叢集(cluster)就是一組計算機,它們作為一個整體向使用者提供一組網絡資源。

這些單個的計算機系統 就是叢集的節點(node)。

搭建高可用叢集需要合理的配置多台計算機之間的角色,資料恢複,一緻性等,主要有以下幾種方式:

(1)主從方式 (非對稱方式)

主機工作,備機處于監控準備狀況;當主機當機時,備機接管主機的一切工作,待主機恢複正常後,按使用者的設定以自動或手動方式将服務切換到主機上運作,資料的一緻性通過共享存儲系統解決。

(2)雙機雙工方式(互備互援)

兩台主機同時運作各自的服務工作且互相監測情況,當任一台主機當機時,另一台主機立即接管它的一切工作,保證工作實時,應用服務系統的關鍵資料存放在共享存儲系統中。

(3)叢集工作方式(多伺服器互備方式)

多台主機一起工作,各自運作一個或幾個服務,各為服務定義一個或多個備用主機,當某個主機故障時,運作在其上的服務就可以被其它主機接管。

MongoDB叢集配置的幾種方案也遵循了這幾種解決辦法。

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

主從架構一般用于備份或者做讀寫分離。一般有一主一從設計和一主多從設計。

由兩種角色構成:

(1)主(Master)

可讀可寫,當資料有修改的時候,會将oplog同步到所有連接配接的salve上去。

(2)從(Slave)

隻讀不可寫,自動從Master同步資料。

特别的,對于Mongodb來說,并不推薦使用Master-Slave架構,因為Master-Slave其中Master當機後不能自動恢複,推薦使用Replica Set,後面會有介紹,除非Replica的節點數超過50,才需要使用Master-Slave架構,正常情況是不可能用那麼多節點的。

還有一點,Master-Slave不支援鍊式結構,Slave隻能直接連接配接Master。Redis的Master-Slave支援鍊式結構,Slave可以連接配接Slave,成為Slave的Slave。

Mongodb的Replica Set即副本集方式主要有兩個目的,一個是資料備援做故障恢複使用,當發生硬體故障或者其它原因造成的當機時,可以使用副本進行恢複。

另一個是做讀寫分離,讀的請求分流到副本上,減輕主(Primary)的讀壓力。

1.Primary和Secondary搭建的Replica Set

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

Replica Set是mongod的執行個體集合,它們有着同樣的資料内容。包含三類角色:

(1)主節點(Primary)

接收所有的寫請求,然後把修改同步到所有Secondary。一個Replica Set隻能有一個Primary節點,當Primary挂掉後,其他Secondary或者Arbiter節點會重新選舉出來一個主節點。預設讀請求也是發到Primary節點處理的,需要轉發到Secondary需要用戶端修改一下連接配接配置。

(2)副本節點(Secondary)

與主節點保持同樣的資料集。當主節點挂掉的時候,參與選主。

(3)仲裁者(Arbiter)

不保有資料,不參與選主,隻進行選主投票。使用Arbiter可以減輕資料存儲的硬體需求,Arbiter跑起來幾乎沒什麼大的硬體資源需求,但重要的一點是,在生産環境下它和其他資料節點不要部署在同一台機器上。

注意,一個自動failover的Replica Set節點數必須為奇數,目的是選主投票的時候要有一個大多數才能進行選主決策。

(4)選主過程

其中Secondary當機,不受影響,若Primary當機,會進行重新選主:

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

2.使用Arbiter搭建Replica Set

 偶數個資料節點,加一個Arbiter構成的Replica Set方式:

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

當資料量比較大的時候,我們需要把資料分片運作在不同的機器中,以降低CPU、記憶體和IO的壓力,Sharding就是資料庫分片技術。

MongoDB分片技術類似MySQL的水準切分和垂直切分,資料庫主要由兩種方式做Sharding:垂直擴充和橫向切分。

垂直擴充的方式就是進行叢集擴充,添加更多的CPU,記憶體,磁盤空間等。

橫向切分則是通過資料分片的方式,通過叢集統一提供服務:

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

(1)MongoDB的Sharding架構

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

(2)MongoDB分片架構中的角色

A.資料分片(Shards)

用來儲存資料,保證資料的高可用性和一緻性。可以是一個單獨的<code>mongod</code>執行個體,也可以是一個副本集。

在生産環境下Shard一般是一個Replica Set,以防止該資料片的單點故障。所有Shard中有一個PrimaryShard,裡面包含未進行劃分的資料集合:

MongoDB高可用叢集配置的方案MongoDB高可用叢集配置的方案

B.查詢路由(Query Routers)

路由就是mongos的執行個體,用戶端直接連接配接mongos,由mongos把讀寫請求路由到指定的Shard上去。

一個Sharding叢集,可以有一個mongos,也可以有多mongos以減輕用戶端請求的壓力。

C.配置伺服器(Config servers)

儲存叢集的中繼資料(metadata),包含各個Shard的路由規則。

本文轉自邴越部落格園部落格,原文連結:http://www.cnblogs.com/binyue/p/5901328.html,如需轉載請自行聯系原作者