MongoDB高可用集羣配置的方案-對稱集羣(一致對外)與非對稱集羣(只有我對外,其它待命)

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

高可用集羣的解決方案

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

(1)網絡高可用

由於網絡存儲的快速發展,網絡冗餘技術被不斷提升,提高IT系統的高可用性的關鍵應用就是網絡高可用性,網絡高可用性與網絡高可靠性是有區別的,網絡高可用性是通過匹配冗餘的網絡設備實現網絡設備的冗餘,達到高可用的目的。
比如冗餘的交換機,冗餘的路由器等

(2)服務器高可用

服務器高可用主要使用的是服務器集羣軟件或高可用軟件來實現。

(3)存儲高可用

使用軟件或硬件技術實現存儲的高度可用性。其主要技術指標是存儲切換功能,數據複製功能,數據快照功能等。當一臺存儲出現故障時,另一臺備用的存儲可以快速切換,達一存儲不停機的目的。

 

MongoDB的高可用集羣配置

高可用集羣,即High Availability Cluster,簡稱HA Cluster。
集羣(cluster)就是一組計算機,它們作爲一個整體向用戶提供一組網絡資源。
這些單個的計算機系統 就是集羣的節點(node)。
搭建高可用集羣需要合理的配置多臺計算機之間的角色,數據恢復,一致性等,主要有以下幾種方式:

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

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

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

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

(3)集羣工作方式(多服務器互備方式)

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

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

 

Master-Slave主從結構

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

由兩種角色構成:

(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。

 

Relica Set副本集方式

Mongodb的Replica Set即副本集方式主要有兩個目的,一個是數據冗餘做故障恢復使用,當發生硬件故障或者其它原因造成的宕機時,可以使用副本進行恢復。

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

1.Primary和Secondary搭建的Replica Set

 

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宕機,會進行重新選主:

2.使用Arbiter搭建Replica Set

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

 

Sharding分片技術

當數據量比較大的時候,我們需要把數據分片運行在不同的機器中,以降低CPU、內存和IO的壓力,Sharding就是數據庫分片技術。

MongoDB分片技術類似MySQL的水平切分和垂直切分,數據庫主要由兩種方式做Sharding:垂直擴展和橫向切分。

垂直擴展的方式就是進行集羣擴展,添加更多的CPU,內存,磁盤空間等。

橫向切分則是通過數據分片的方式,通過集羣統一提供服務:

(1)MongoDB的Sharding架構

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

A.數據分片(Shards)

用來保存數據,保證數據的高可用性和一致性。可以是一個單獨的mongod實例,也可以是一個副本集。

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


B.查詢路由(Query Routers)

路由就是mongos的實例,客戶端直接連接mongos,由mongos把讀寫請求路由到指定的Shard上去。

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


C.配置服務器(Config servers)

保存集羣的元數據(metadata),包含各個Shard的路由規則。



轉 http://www.cnblogs.com/binyue/p/5901328.html

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