天天看點

mongodb的三種叢集架構

轉載:http://c.biancheng.net/view/6567.html

本節我們從理論上講解 MongoDB 分布式叢集架構的三種模式,下節《将MongoDB部署到分布式叢集(實操)》我們會使用三台機器實際部署 MongoDB,帶着大家實踐一把,光說不練假把式。

MongoDB 有三種叢集部署模式,分别為主從複制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

  • Master-Slaver 是一種主從副本的模式,目前已經不推薦使用。
  • Replica Set 模式取代了 Master-Slaver 模式,是一種互為主從的關系。Replica Set 将資料複制多份儲存,不同伺服器儲存同一份資料,在出現故障時自動切換,實作故障轉移,在實際生産中非常實用。
  • Sharding 模式适合處理大量資料,它将資料分開存儲,不同伺服器儲存不同的資料,所有伺服器資料的總和即為整個資料集。

Sharding 模式追求的是高性能,而且是三種叢集中最複雜的。在實際生産環境中,通常将 Replica Set 和 Sharding 兩種技術結合使用。

主從複制

雖然 MongoDB 官方建議用副本集替代主從複制,但是本節還是從主從複制入手,讓大家了解 MongoDB 的複制機制。

主從複制是 MongoDB 中最簡單的資料庫同步備份的叢集技術,其基本的設定方式是建立一個主節點(Primary)和一個或多個從節點(Secondary),如下圖所示。

mongodb的三種叢集架構
mongodb的三種叢集架構

這種方式比單節點的可用性好很多,可用于備份、故障恢複、讀擴充等。叢集中的主從節點均運作 MongoDB 執行個體,完成資料的存儲、查詢與修改操作。

主從複制模式的叢集中隻能有一個主節點,主節點提供所有的增、删、查、改服務,從節點不提供任何服務,但是可以通過設定使從節點提供查詢服務,這樣可以減少主節點的壓力。

另外,每個從節點要知道主節點的位址,主節點記錄在其上的所有操作,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作,進而保證從節點的資料與主節點一緻。

在主從複制的叢集中,當主節點出現故障時,隻能人工介入,指定新的主節點,從節點不會自動更新為主節點。同時,在這段時間内,該叢集架構隻能處于隻讀狀态。

副本集

副本集的叢集架構如下圖所示。

mongodb的三種叢集架構
mongodb的三種叢集架構

此叢集擁有一個主節點和多個從節點,這一點與主從複制模式類似,且主從節點所負責的工作也類似,但是副本集與主從複制的差別在于:當叢集中主節點發生故障時,副本集可以自動投票,選舉出新的主節點,并引導其餘的從節點連接配接新的主節點,而且這個過程對應用是透明的。

可以說,MongoDB 的副本集是自帶故障轉移功能的主從複制。

MongoDB 副本集使用的是 N 個 mongod 節點建構的具備自動容錯功能、自動恢複功能的高可用方案。在副本集中,任何節點都可作為主節點,但為了維持資料一緻性,隻能有一個主節點。

主節點負責資料的寫入和更新,并在更新資料的同時,将操作資訊寫入名為 oplog 的日志檔案當中。主節點還負責指定其他節點為從節點,并設定從節點資料的可讀性,進而讓從節點來分擔叢集讀取資料的壓力。

另外,從節點會定時輪詢讀取 oplog 日志,根據日志内容同步更新自身的資料,保持與主節點一緻。

在一些場景中,使用者還可以使用副本集來擴充讀性能,用戶端有能力發送讀寫操作給不同的伺服器,也可以在不同的資料中心擷取不同的副本來擴充分布式應用的能力。

在副本集中還有一個額外的仲裁節點(不需要使用專用的硬體裝置),負責在主節點發生故障時,參與選舉新節點作為主節點。

副本集中的各節點會通過心跳資訊來檢測各自的健康狀況,當主節點出現故障時,多個從節點會觸發一次新的選舉操作,并選舉其中一個作為新的主節點。為了保證選舉票數不同,副本集的節點數保持為奇數。

分片

副本集可以解決主節點發生故障導緻資料丢失或不可用的問題,但遇到需要存儲海量資料的情況時,副本集機制就束手無策了。副本集中的一台機器可能不足以存儲資料,或者說叢集不足以提供可接受的讀寫吞吐量。這就需要用到 MongoDB 的分片(Sharding)技術,這也是 MongoDB 的另外一種叢集部署模式。

分片是指将資料拆分并分散存放在不同機器上的過程。有時也用分區來表示這個概念。将資料分散到不同的機器上,不需要功能強大的大型計算機就可以存儲更多的資料,處理更大的負載。

MongoDB 支援自動分片,可以使資料庫架構對應用程式不可見,簡化系統管理。對應用程式而言,就如同始終在使用一個單機的 MongoDB 伺服器一樣。

MongoDB 的分片機制允許建立一個包含許多台機器的叢集,将資料子集分散在叢集中,每個分片維護着一個資料集合的子集。與副本集相比,使用叢集架構可以使應用程式具有更強大的資料處理能力。

MongoDB 分片的叢集模式如下圖所示。

mongodb的三種叢集架構
mongodb的三種叢集架構

建構一個 MongoDB 的分片叢集,需要三個重要的元件,分别是分片伺服器(Shard Server)、配置伺服器(Config Server)和路由伺服器(Route Server)。

Shard Server

Config Server

Route Server

繼續閱讀