溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解MongoDB中的shard分片

發(fā)布時(shí)間:2021-11-03 09:59:16 來(lái)源:億速云 閱讀:180 作者:柒染 欄目:云計(jì)算

如何理解MongoDB中的shard分片,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

閱讀目的:深刻的了解MongoDB的分片機(jī)制

閱讀關(guān)鍵: 無(wú)比要對(duì)MongoDB的與分片 shard有關(guān)的概念有清楚的了解。

 1:   Shard介紹

        shard指的是水平方向的多節(jié)點(diǎn)的數(shù)據(jù)分散的存儲(chǔ),說(shuō)的更簡(jiǎn)單一點(diǎn),就是一臺(tái)機(jī)器上可能裝不下的數(shù)據(jù),我們

裝到多臺(tái)機(jī)器上去,比如,我們將全國(guó)的省份證的信息,存儲(chǔ)到不同的Shard Server中間去,這里的Shard Server,就是每一個(gè)分布式的Mongo機(jī)器。

        應(yīng)用的程序可以通過(guò)mongos process 登陸到shard集群之中,MongoPress 進(jìn)行一個(gè)路由上的調(diào)度。查詢,請(qǐng)求的過(guò)程也是如此。 面對(duì)使用者只有一層一個(gè)節(jié)點(diǎn)。

    

2: 負(fù)載均衡和失效切換

        當(dāng)某個(gè)shard的負(fù)載超過(guò)一定闕值后,就會(huì)自動(dòng)的重新分發(fā)數(shù)據(jù),用來(lái)保證系統(tǒng)的負(fù)載均衡。更簡(jiǎn)單的話來(lái)形容,就是

寫入的時(shí)候如果向某一臺(tái)機(jī)器上去寫,超過(guò)了機(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)圖:

        如何理解MongoDB中的shard分片

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超過(guò)一定量的數(shù)據(jù)時(shí),chunk會(huì)被遷移到其他shard之中,新增shard也會(huì)影響chunk的移動(dòng),好比你把日志

寫入到你的本地文件,規(guī)定是60M的一個(gè)文件,一旦超過(guò)大小,就有新的文件,一旦文件在機(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就是用來(lái)存儲(chǔ):所有shard節(jié)點(diǎn)的配置信息、每個(gè)chunk的shard key范圍、chunk在各shard的分布情況、該集群中所有DB和collection的sharding配置信息。

說(shuō)的更加明白一點(diǎn),Config Server 保存集群的元數(shù)據(jù)。

Route Process

這是一個(gè)前端路由,客戶端由此接入,然后詢問Config Servers需要到哪個(gè)Shard上查詢或保存記錄,再連接相應(yīng)的Shard進(jìn)行操作,最后將結(jié)果返回給客戶端。客戶端只需要將原本發(fā)給mongod的查詢或更新請(qǐng)求原封不動(dòng)地發(fā)給Routing Process,而不必關(guān)心所操作的記錄存儲(chǔ)在哪個(gè)Shard上。

route process 說(shuō)的更明白點(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)圖如下:

     如何理解MongoDB中的shard分片

關(guān)于 如何理解MongoDB中的shard分片問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI