十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
如何理解MongoDB中的shard分片,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)長(zhǎng)期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為涇川企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站制作,涇川網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
閱讀目的:深刻的了解MongoDB的分片機(jī)制
閱讀關(guān)鍵: 無比要對(duì)MongoDB的與分片 shard有關(guān)的概念有清楚的了解。
1: Shard介紹
shard指的是水平方向的多節(jié)點(diǎn)的數(shù)據(jù)分散的存儲(chǔ),說的更簡(jiǎn)單一點(diǎn),就是一臺(tái)機(jī)器上可能裝不下的數(shù)據(jù),我們
裝到多臺(tái)機(jī)器上去,比如,我們將全國(guó)的省份證的信息,存儲(chǔ)到不同的Shard Server中間去,這里的Shard Server,就是每一個(gè)分布式的Mongo機(jī)器。
應(yīng)用的程序可以通過mongos process 登陸到shard集群之中,MongoPress 進(jìn)行一個(gè)路由上的調(diào)度。查詢,請(qǐng)求的過程也是如此。 面對(duì)使用者只有一層一個(gè)節(jié)點(diǎn)。
2: 負(fù)載均衡和失效切換
當(dāng)某個(gè)shard的負(fù)載超過一定闕值后,就會(huì)自動(dòng)的重新分發(fā)數(shù)據(jù),用來保證系統(tǒng)的負(fù)載均衡。更簡(jiǎn)單的話來形容,就是
寫入的時(shí)候如果向某一臺(tái)機(jī)器上去寫,超過了機(jī)器自身的能力了,就會(huì)重新的分發(fā)數(shù)據(jù),與之對(duì)應(yīng)的Hbase,通常會(huì)出現(xiàn)單臺(tái)
寫入的熱點(diǎn)問題,目前對(duì)于Mongo的處理機(jī)制還未知。
在一個(gè)通常的配置之中,每一個(gè)Shard中都該包含了2個(gè)以上節(jié)點(diǎn)的設(shè)備組,設(shè)備組的名字通常稱為 replica.set,replica.set有N臺(tái)服務(wù)器,在其中有一個(gè)為主,其他的為輔助,一旦其中的一個(gè)掛掉以后,會(huì)自動(dòng)重啟將一臺(tái)服務(wù)器切換為
主服務(wù)器。
3:
Shard架構(gòu)圖:
4 :shard key
要實(shí)現(xiàn)分片功能,我們需要指定集合的分片key,相當(dāng)于數(shù)據(jù)庫(kù)的分區(qū)字段,
這個(gè)分片key通常需要?jiǎng)?chuàng)建一個(gè)索引,分片key可以由一個(gè)或則多個(gè)字段構(gòu)成
5: chunks
Chunks是一個(gè)集合之中的一段連續(xù)的數(shù)據(jù),當(dāng)一個(gè)Chunk達(dá)到一定大小的時(shí)候,就會(huì)開始分裂。當(dāng)一個(gè)
shard超過一定量的數(shù)據(jù)時(shí),chunk會(huì)被遷移到其他shard之中,新增shard也會(huì)影響chunk的移動(dòng),好比你把日志
寫入到你的本地文件,規(guī)定是60M的一個(gè)文件,一旦超過大小,就有新的文件,一旦文件在機(jī)器上存放不了了,
那就將這臺(tái)機(jī)器上的文件轉(zhuǎn)移到其他的機(jī)器上去~
MongoDB的shard,四環(huán)一種將海量的數(shù)據(jù)水平擴(kuò)展的數(shù)據(jù)庫(kù)集群系統(tǒng),數(shù)據(jù)庫(kù)分表存放在Sharding的
各個(gè)節(jié)點(diǎn)之上。
相對(duì)于關(guān)系數(shù)據(jù)庫(kù)而言,Chunk就是數(shù)據(jù)庫(kù)中的一行記錄,Collection就是對(duì)于與關(guān)系數(shù)據(jù)庫(kù)中的表。
Shard Server
即存儲(chǔ)實(shí)際數(shù)據(jù)的分片,每個(gè)Shard可以是一個(gè)mongod實(shí)例,也可以是一組mongod實(shí)例構(gòu)成的Replica Set。為了實(shí)現(xiàn)每個(gè)Shard內(nèi)部的auto-failover,MongoDB官方建議每個(gè)Shard為一組Replica Set。關(guān)于如何安裝及搭建replica set請(qǐng)參考我的另一篇文章 http://gong1208.iteye.com/blog/1558355
Config Server
為了將一個(gè)特定的collection存儲(chǔ)在多個(gè)shard中,需要為該collection指定一個(gè)shard key,例如{age: 1} ,shard key可以決定該條記錄屬于哪個(gè)chunk。Config Servers就是用來存儲(chǔ):所有shard節(jié)點(diǎn)的配置信息、每個(gè)chunk的shard key范圍、chunk在各shard的分布情況、該集群中所有DB和collection的sharding配置信息。
說的更加明白一點(diǎn),Config Server 保存集群的元數(shù)據(jù)。
Route Process
這是一個(gè)前端路由,客戶端由此接入,然后詢問Config Servers需要到哪個(gè)Shard上查詢或保存記錄,再連接相應(yīng)的Shard進(jìn)行操作,最后將結(jié)果返回給客戶端??蛻舳酥恍枰獙⒃景l(fā)給mongod的查詢或更新請(qǐng)求原封不動(dòng)地發(fā)給Routing Process,而不必關(guān)心所操作的記錄存儲(chǔ)在哪個(gè)Shard上。
route process 說的更明白點(diǎn)就是一個(gè)選擇器,不斷的調(diào)度合適的客戶端請(qǐng)求,將需求中所請(qǐng)求,所需要的數(shù)據(jù),從合適的shard之中返回你所需求的數(shù)據(jù)。
下面我們?cè)谕慌_(tái)物理機(jī)器上構(gòu)建一個(gè)簡(jiǎn)單的 Sharding Cluster:
架構(gòu)圖如下:
關(guān)于 如何理解MongoDB中的shard分片問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。