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

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

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