一文了解MongoDB的各種部署模式

單節(jié)點模式(Standalone,不推薦用于生產(chǎn)環(huán)境)
standalone模式即單節(jié)點模式,指在服務(wù)器上只部署一個 mongod 進程用于讀寫數(shù)據(jù)。優(yōu)點是部署簡單,可以快速完成部署,缺點是無容災(zāi)。只推薦用于日常的開發(fā)、測試和學(xué)習(xí)。
主從復(fù)制模式(官方已不建議使用,不推薦用于生產(chǎn)環(huán)境)
主從復(fù)制模式也比較簡單,包含一個主節(jié)點(Primary)和一個或多個從節(jié)點(Secondary)。主節(jié)點提供讀寫服務(wù),從節(jié)點不提供任何服務(wù)。也可以修改配置讓從節(jié)點提供只讀服務(wù),以減少主節(jié)點的壓力,每個從節(jié)點會定期輪詢主節(jié)點的oplog以保持數(shù)據(jù)與主節(jié)點一致。
這種模式相較于單節(jié)點模式,可用性高很多,可用于備份、故障恢復(fù)、讀擴展等。缺點是當(dāng)主節(jié)點出現(xiàn)故障時,只能人工介入指定新的主節(jié)點(從節(jié)點不會自動升級為主節(jié)點),并且在這段時間內(nèi),集群處于只讀狀態(tài)。
副本集模式(Relica Set)
副本集模式包含一個主節(jié)點(Primary)和一個或多個從節(jié)點(Secondary),這一點與主從復(fù)制模式類似且主從節(jié)點的作用也類似。相較于主從復(fù)制模式,副本集模式的優(yōu)勢是當(dāng)主節(jié)點發(fā)生故障時,副本集可以自動投票產(chǎn)生新的主節(jié)點,并引導(dǎo)其余的從節(jié)點連接新的主節(jié)點。副本集架構(gòu)如下圖所示:

副本集中各節(jié)點通過心跳機制來檢測各自的健康狀況,當(dāng)主節(jié)點出現(xiàn)故障時,多個從節(jié)點會觸發(fā)選舉操作來選舉其中一個作為新的主節(jié)點。為了保證選舉票數(shù)不同,副本集的節(jié)點數(shù)保持為奇數(shù)。
在某些情況下(例如只有一個主節(jié)點和一個從節(jié)點的情況下,由于成本限制不允許添加另一個從節(jié)點),可以選擇向副本集中添加一個仲裁節(jié)點(Arbiter)。仲裁節(jié)點參與選舉但不會被選為主節(jié)點(因為選舉節(jié)點沒有數(shù)據(jù)集的副本)。
分片集群模式(Sharded Cluster)
副本集模式雖然解決了高可用問題,但不能滿足海量數(shù)據(jù)和需要非常高吞吐的場景。這時候就需要使用到分片技術(shù)(sharding,指將數(shù)據(jù)拆分并分散存儲在不同機器上)了,即分片集群模式。
分片集群模式主要利用了水平擴展的特性,將數(shù)據(jù)和負載分散到多臺機器上,并根據(jù)需要添加額外的服務(wù)器以增加容量和提高性能。雖然單臺機器的整體性能或容量可能不高,但每臺機器只是處理總體工作負載的一個單元,集群整體效率可能比單臺性能和容量非常高的機器更高。
搭建一個分片集群需要如下幾個組件:
- shard,每個shard都是一個mongo數(shù)據(jù)庫實例,包含分片數(shù)據(jù)的一個子集。一個shard可由幾臺機器組成一個副本集,防止因主節(jié)點單點故障導(dǎo)致整個系統(tǒng)崩潰。
- config servers,用于配置服務(wù)器存儲集群的元數(shù)據(jù)和配置設(shè)置。
- mongos,在集群中作為查詢路由器,客戶端程序由此接入,讓整個集群看起來像是一個單一的數(shù)據(jù)庫,提供客戶端應(yīng)用程序和分片集群之間的接口。mongos本身不保存數(shù)據(jù),啟動時從config servers加載集群信息到緩存中,并將客戶端的請求路由給每個shard,聚合各shard返回的結(jié)果返回給客戶端。
分片集群內(nèi)組件間的交互如下圖:

分片集群模式有以下幾個優(yōu)勢:
- 將讀寫負載分布在集群中的各個分片上,允許每個分片處理集群操作的一個子集。通過添加更多的分片,讀寫工作負載都可以在集群中水平擴展。
- 將數(shù)據(jù)分布到集群中的各個分片上,允許每個分片包含整個集群數(shù)據(jù)的一個子集。隨著數(shù)據(jù)集的增長,額外的分片會增加集群的存儲容量。
- 高可用性,即使一個或多個分片副本集完全不可用,分片集群也可以繼續(xù)執(zhí)行部分讀寫。也就是說,雖然無法訪問不可用分片上的數(shù)據(jù),但對可用分片的讀寫仍然可以成功。
小結(jié)
本文介紹了MongoDB的四種部署模式:單節(jié)點模式和三種集群模式。副本集模式已經(jīng)替代了主從復(fù)制模式,保障了集群的可靠性;分片集群模式的可擴展性,可以滿足海量數(shù)據(jù)的存儲和高吞吐的需求。生產(chǎn)環(huán)境中,不建議使用單實例模式和主從復(fù)制模式,副本集模式和分片集模式根據(jù)業(yè)務(wù)場景來選擇。




































