1. 程式人生 > >MongoDB叢集架構分析

MongoDB叢集架構分析

叢集元件——單機例項(mongod instance)

只有一個單機例項,客戶端與其直接連線使用。
單例項

叢集元件——副本集(Replica sets)

副本集通常由至少3個節點組成。其中一個是主節點,負責處理客戶端請求,其餘的都是從節點,負責複製主節點上的資料。
mongodb各個節點常見的搭配方式為:一主多從(正常情況下至少3個節點組成副本集)。
主節點記錄在其上的所有操作,從節點定期輪詢主節點獲取這些操作,然後對自己的資料副本執行這些操作,從而保證從節點的資料與主節點一致。
選舉機制:當一個節點掛掉之後需要滿足“大多數”成員投票,如果不滿足大多數的話,會造成多個節點成為主節點。通常節點之間通訊斷掉之後,會認為其他節點不可用,如果5個節點的副本集,其中3個與另外兩個不在同一個機房,當兩個機房通訊斷開時,兩個節點的機房認為其他3個節點多掛了,就會開始選舉。這個時候其他3個節點其實是可用的只是與另外兩個節點斷開而已,這個時候就會出現2個主節點。
這裡寫圖片描述

叢集元件——分片(Sharding)

分片是將一個集合的資料分別儲存在不同的shard節點上減輕單機壓力
Shard Keys 的選擇很重要,MongoDB主要根據Shard Keys來劃分資料,Shard Keys可以由文件的一個或者多個物理鍵值組成,對於分片Key的選定直接決定了叢集中資料分佈是否均衡、叢集效能是否合理。
這裡寫圖片描述

叢集元件——路由伺服器(mongos)

路由伺服器負責把對應的資料請求請求轉發到對應的shard伺服器上
mongos,資料庫叢集請求的入口,所有的請求都通過mongos進行協調,不需要在應用程式新增一個路由選擇器,mongos自己就是一個請求分發中心,它負責把對應的資料請求請求轉發到對應的shard伺服器上。在生產環境通常有多mongos作為請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作。
這裡寫圖片描述

叢集元件——配置伺服器(mongos)

儲存所有資料庫元資訊(路由、分片)的配置。mongos本身沒有物理儲存分片伺服器和資料路由資訊,只是快取在記憶體裡,配置伺服器則實際儲存這些資料。
配置伺服器相當與叢集大腦,儲存所有資料庫元資訊(路由、分片)的配置。mongos本身沒有物理儲存分片伺服器和資料路由資訊,只是快取在記憶體裡,配置伺服器則實際儲存這些資料。mongos第一次啟動或者關掉重啟就會從 config server 載入配置資訊,以後如果配置伺服器資訊變化會通知到所有的 mongos 更新自己的狀態,這樣 mongos 就能繼續準確路由。在生產環境通常有多個 config server 配置伺服器,因為它儲存了分片路由的元資料,這個可不能丟失!就算掛掉其中一臺,只要還有存貨, mongodb叢集就不會掛掉。
這裡寫圖片描述

叢集元件——叢集架構

一個典型的叢集結構如下:
這裡寫圖片描述
叢集的組成: 單機mongod 組成副本集 -> 分片, 客戶端通過mongos 讀取 config servers的資訊與分片通訊,客戶端程式感覺不到叢集的存在,他只需要知道mongos伺服器的ip和連線方式,至於它有多少個叢集ip 都不需要關注,mongos 會自動選擇。

Shards

每一個shard包括一個或多個服務和儲存資料的mongod程序(mongod是MongoDB資料的核心程序),典型的每個shard開啟多個服務來提高服務的可用性。這些服務/mongod程序在shard中組成一個複製集。