Sharding cluster是一種可以水平擴展的模式,可以滿足MongoDB數(shù)據(jù)量大量增長的需求,實際大規(guī)模應(yīng)用一般會采用這種架構(gòu)去構(gòu)建。sharding分片很好的解決了單臺服務(wù)器磁盤空間、內(nèi)存、cpu等硬件資源的限制問題,把數(shù)據(jù)水平拆分出去,降低單節(jié)點的訪問壓力。每個分片都是一個獨立的數(shù)據(jù)庫,所有的分片組合起來構(gòu)成一個邏輯上的完整的數(shù)據(jù)庫。因此,分片機制降低了每個分片的數(shù)據(jù)操作量及需要存儲的數(shù)據(jù)量,達到多臺服務(wù)器來應(yīng)對不斷增加的負載和數(shù)據(jù)的效果。
為什么使用分片?
復(fù)制所有的寫入操作到主節(jié)點
延遲的敏感數(shù)據(jù)會在主節(jié)點查詢
單個副本集限制在12個節(jié)點
當請求量巨大時會出現(xiàn)內(nèi)存不足。
本地磁盤不足
垂直擴展價格昂貴
mongodb sharding服務(wù)器架構(gòu)

- Shard Server:
mongod 實例,用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個 shard server 角色可由幾臺機器組個一個 relica set 承擔,防止主機單點故障。這是一個獨立普通的mongod進程,保存數(shù)據(jù)信息,可以是一個副本集也可以是單獨的一臺服務(wù)器。 - Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
這是一個獨立的mongod進程,保存集群和分片的元數(shù)據(jù),即各分片包含了哪些數(shù)據(jù)的信息。最先開始建立,啟用日志功能。像啟動普通的 mongod 一樣啟動
配置服務(wù)器,指定configsvr 選項。不需要太多的空間和資源,配置服務(wù)器的 1KB 空間相當于真是數(shù)據(jù)的 200MB。保存的只是數(shù)據(jù)的分布表。 - Query Routers:
前端路由,客戶端由此接入,且讓整個集群看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。
起到一個路由的功能,供程序連接。本身不保存數(shù)據(jù),在啟動時從配置服務(wù)器加載集群信息,開啟 mongos 進程需要知道配置服務(wù)器的地址,指定configdb選項。
mongos片鍵的意義
一個好的片鍵對分片至關(guān)重要。 片鍵必須是一個索引 ,通 過sh.shardCollection 加會自動創(chuàng)建索引。
一個自增的片鍵對寫入和數(shù)據(jù)均勻分布就不是很好, 因為自增
的片鍵總會在一個分片上寫入,后續(xù)達到某個閥值可能會寫到別的分片。但是按照片鍵查詢會非常高效。
隨機片鍵對數(shù)據(jù)的均勻分布效果很好。注意盡量避免在多個分片上進行查詢。在所有分片上查詢,mongos 會對結(jié)果進行歸并排序

更多內(nèi)容參考:https://www.cnblogs.com/nulige/p/7613721.html