溫馨提示×

溫馨提示×

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

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

mongodb數(shù)據(jù)塊怎么遷移

發(fā)布時間:2022-04-18 13:36:43 來源:億速云 閱讀:129 作者:iii 欄目:開發(fā)技術(shù)

這篇“mongodb數(shù)據(jù)塊怎么遷移”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mongodb數(shù)據(jù)塊怎么遷移”文章吧。

1. 基本概念

1.1 Chunk(數(shù)據(jù)塊)

表示特定服務(wù)器上面,連續(xù)范圍的分片鍵值所包含的一組數(shù)據(jù),是一個邏輯概念。

例如,某數(shù)據(jù)塊記錄如下:

{
    "_id" : "chunk-a",  // 數(shù)據(jù)塊Id
    "ns" : "user.address",  // 該數(shù)據(jù)塊對應(yīng)的數(shù)據(jù)庫名和表名
    "min" : {               // 該數(shù)據(jù)塊對應(yīng)的分片鍵值的起始值(包含),是“Shi Jiazhuang”
        "city" : "Shi Jiazhuang"
    },
    "max" : {               // 該數(shù)據(jù)塊對應(yīng)的分片鍵值的結(jié)束值(不包含),是“Nanjjing”
        "city" : "Nan Jing"
    },
    "shard" : "repa"        // 該數(shù)據(jù)塊存儲在repa分片服務(wù)器               
}
// 即該數(shù)據(jù)塊記錄表示,數(shù)據(jù)庫user中的表address中的“city”字段中,其值從“Shi Jiazhuang”(包含)到“Nan Jing”(不包含)這段連續(xù)區(qū)間的數(shù)據(jù),都存儲在名為repa的分片服務(wù)器。

1.2 Chunk Size(數(shù)據(jù)塊大?。?/h4>

數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù),如果超過64M(默認(rèn)值),則會被系統(tǒng)自動切分為兩個數(shù)據(jù),即數(shù)據(jù)塊會從1塊切分為2塊,圖示如下:

mongodb數(shù)據(jù)塊怎么遷移

1.3 Migration(數(shù)據(jù)塊遷移)

mongodb有一個后臺的平衡器進(jìn)程,它會監(jiān)控各個分片服務(wù)器上面的數(shù)據(jù)塊的數(shù)量,如果發(fā)現(xiàn)不同的分片服務(wù)器上面數(shù)據(jù)塊的數(shù)量差異,超過閾值,則會啟動數(shù)據(jù)塊遷移任務(wù),

直至不同的分片服務(wù)器之間的數(shù)據(jù)塊的數(shù)量差異落在閾值之內(nèi),圖示如下:

mongodb數(shù)據(jù)塊怎么遷移

1.4 Migration Thresholds(遷移閾值)

數(shù)據(jù)塊的遷移閾值,是和該表的數(shù)據(jù)塊總數(shù)相關(guān)的,具體如下:

數(shù)據(jù)塊總數(shù)量閾值
小于202
20-794
大于等于808

2. 遷移流程

數(shù)據(jù)塊的遷移對于用戶和應(yīng)用層來說是透明的,當(dāng)然可能會有些性能的損失,整個遷移流程有7個步驟,圖示如下

mongodb數(shù)據(jù)塊怎么遷移

各個步驟的內(nèi)容如下:

1. 平衡器發(fā)送遷移命令給源節(jié)點(diǎn)。

2. 源節(jié)點(diǎn)啟動了一個內(nèi)部的數(shù)據(jù)塊遷移命令給目標(biāo)節(jié)點(diǎn),同時在數(shù)據(jù)塊遷移期間,對于該數(shù)據(jù)塊的請求依然路由到源節(jié)點(diǎn)。

3. 目標(biāo)節(jié)點(diǎn)首先創(chuàng)建該數(shù)據(jù)塊上缺失的索引(如果需要的話)。

4. 目標(biāo)節(jié)點(diǎn)到源節(jié)點(diǎn)拉取數(shù)據(jù)。

5. 目標(biāo)節(jié)點(diǎn)需要到源節(jié)點(diǎn)再請求在步驟4執(zhí)行期間的增量變更數(shù)據(jù)(新增、更新和刪掉),如果有則跳轉(zhuǎn)到步驟4,直到?jīng)]有增量數(shù)據(jù)。

6. 數(shù)據(jù)全部遷移成功后,源節(jié)點(diǎn)會向配置服務(wù)器(config server)發(fā)送請求,更新該數(shù)據(jù)塊的元數(shù)據(jù)中的"分片服務(wù)器(shard)"的值為目標(biāo)節(jié)點(diǎn)。

7. 源節(jié)點(diǎn)刪除本地的該數(shù)據(jù)塊對應(yīng)的數(shù)據(jù)。

3. 最佳實(shí)踐

以上分享了數(shù)據(jù)塊和數(shù)據(jù)塊遷移的一些基本概念和流程,下面是一些最佳實(shí)踐。

3.1 關(guān)于數(shù)據(jù)塊大小的選擇

數(shù)據(jù)塊的大小,默認(rèn)是64M,通常情況下是不需要修改它的,但是有時候該值的大小根據(jù)不同的業(yè)務(wù)場景會帶來不同的影響,需要綜合多方面的因素來設(shè)置該值。

數(shù)據(jù)塊大小太?。和ǔG闆r下,較小的數(shù)據(jù)塊大小,會帶來更頻繁的數(shù)據(jù)塊遷移,數(shù)據(jù)在集群間的分布會更加均衡,但是如果分片鍵設(shè)置的不夠合理,則會產(chǎn)生很多無法切分(split)的大數(shù)據(jù)塊,太大的數(shù)據(jù)塊無法在分片之間遷移,從而導(dǎo)致數(shù)據(jù)分布的不均衡性,此時需要把數(shù)據(jù)塊大小調(diào)大。

數(shù)據(jù)塊大小太大:較大的數(shù)據(jù)塊,意味著更少的數(shù)據(jù)塊遷移,數(shù)據(jù)在集群間的分布容易出現(xiàn)不平衡,同時也容易產(chǎn)生讀寫熱點(diǎn)(可手動切分),此時需要把數(shù)據(jù)塊大小調(diào)小。

3.2 關(guān)于數(shù)據(jù)塊遷移對集群性能的影響

數(shù)據(jù)塊遷移除了占用目標(biāo)節(jié)點(diǎn)和源節(jié)點(diǎn)的帶寬和磁盤讀寫資源外,在遷移流程中的步驟6會短暫阻塞對該數(shù)據(jù)塊的訪問,影響應(yīng)用的訪問,因此建議設(shè)置平衡器的活躍時間窗口,設(shè)置為業(yè)務(wù)低估時進(jìn)行,步驟如下:

1. 連接到mongos。

2. 切換到config數(shù)據(jù)庫

use config

3. 啟動平衡器

如果平衡器是關(guān)閉狀態(tài),則設(shè)置活躍時間窗口也是不會做數(shù)據(jù)遷移的,命令如下:

sh.startBalancer()

4. 修改活躍時間窗口

db.settings.updateOne(
   { _id: "balancer" },
   { $set: { activeWindow : { start : "01:00", stop : "06:00" } } },  // start和stop的格式為"HH:MM",其中HH的取值范圍是0到23,MM的取值范圍是00到59
   { upsert: true }
)

以上就是關(guān)于“mongodb數(shù)據(jù)塊怎么遷移”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

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

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

AI