MongoDB balancer的使用詳解
在MongoDB中,balancer(平衡器)是一個(gè)后臺進(jìn)程,它監(jiān)控每個(gè)shard上的chunk數(shù)量,一旦chunk的數(shù)量差異超過了閾值,balancer會自動遷移數(shù)據(jù)塊,從而保證每個(gè)分片上chunk數(shù)量的相對平衡。
整個(gè)搬遷的過程對于用戶來說是透明的,但是搬遷的過程中會對用戶產(chǎn)生一些影響。
01 balancer簡介
從MongoDB3.4開始,balancer運(yùn)行在config server的主節(jié)點(diǎn)上。
在3.4版本中,balancer進(jìn)程活躍期間,config server的主節(jié)點(diǎn)通過修改locks集合中的一個(gè)_id為balancer的文檔,來持有"balancer lock";
3.6版本中,balancer不再持有鎖
默認(rèn)的情況下,balancer始終處于開啟狀態(tài),可以使用下面的命令來查看balancer的運(yùn)行情況:
mongos> sh.getBalancerState() true
同樣的,我們可以使用下面幾個(gè)命令來簡單的管理balancer:
查看banlancer是否正在工作 sh.isBalancerRunning() 停止balancer sh.stopBalancer() 啟動balancer sh.setBalancerState( true )
02 balancer工作中可能對業(yè)務(wù)造成的影響?
1、磁盤占用:
從MongoDB2.6開始,MongoDB會自動歸檔遷移的chunk文檔,以方便在chunk搬遷過程中出現(xiàn)問題后的文檔恢復(fù)。
我們可以通過配置文件中的參數(shù):sharding.archiveMovedChunks
來控制是否開啟遷移過程中chunk的自動歸檔,該參數(shù)在MongoDB2.6和3.0版本是默認(rèn)開啟的,其他版本都是默認(rèn)關(guān)閉的。
2、帶寬和負(fù)載占用:
balancer再對chunk遷移過程中,會造成帶寬和負(fù)載方面的開銷。為了減輕這些影響,平衡器做了如下的工作:
a、一次遷移只能遷一個(gè)chunk,
b、一個(gè)shard同一時(shí)間只能執(zhí)行一個(gè)遷移任務(wù)
c、從MongoDB3.4開始,引入了并行的chunk遷移,對于一個(gè)有n個(gè)shard的集群,每次最多并行遷移n/2(向下取整)個(gè)數(shù)據(jù)塊
d、只有當(dāng)chunk數(shù)量最多的shard和chunk數(shù)量最少的shard的差異達(dá)到閾值的時(shí)候,才開始遷移chunk
e、支持用戶設(shè)置balancer的窗口時(shí)間,在業(yè)務(wù)低峰窗口時(shí)間內(nèi)進(jìn)行chunk的遷移工作,從而最大程度減輕對業(yè)務(wù)的影響。
03 設(shè)置balancer的執(zhí)行時(shí)間窗口
1、通過mongo shell連接到mongos上
2、切換到config數(shù)據(jù)庫
use config
3、確保當(dāng)前balancer是開啟的
sh.getBalancerState() 返回true
4、設(shè)置窗口時(shí)間
db.settings.update( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } )
其中,start-time和stop-time的取值如下:
- For HH values, use hour values ranging from 00 - 23.
- For MM value, use minute values ranging from 00 - 59.
MongoDb會以config數(shù)據(jù)庫的primary節(jié)點(diǎn)的時(shí)間為參考,開始執(zhí)行相關(guān)chunk的搬遷操作。
要確保設(shè)置的時(shí)間范圍內(nèi),所有的chunk能夠搬遷完畢,否則會出現(xiàn)數(shù)據(jù)庫搬遷過后,依舊不均衡的現(xiàn)象。
移除chunk搬遷時(shí)間窗口的命令如下:
use config db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })
04 備份和balancer
MongoDB中,不要在備份的時(shí)候啟用balancer,否則,備份的數(shù)據(jù)將會不一致。通常情況下,備份的時(shí)間窗口要和balancer的時(shí)間窗口錯(cuò)開,如果balancer沒有設(shè)置時(shí)間窗口,則在備份的時(shí)候,關(guān)閉balancer
時(shí)間關(guān)系,就先到這里吧,其他內(nèi)容后面再說
以上就是MongoDB balancer的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于MongoDB balancer的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MongoDB中aggregate()方法實(shí)例詳解
MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于MongoDB中aggregate()方法的相關(guān)資料,需要的朋友可以參考下2023-01-01MongoDB快速入門筆記(二)之MongoDB的概念及簡單操作
MongoDB是面向集合的文檔式數(shù)據(jù)庫,不像關(guān)系數(shù)據(jù)庫那樣,有表,列、行,mongoDB數(shù)據(jù)庫則是由一系列的文檔組成。接下來通過本文給大家介紹MongoDB的概念及簡單操作,一起看看吧2016-06-06遷移sqlserver數(shù)據(jù)到MongoDb的方法
這篇文章主要介紹了遷移sqlserver數(shù)據(jù)到MongoDb的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)
這篇文章主要介紹了MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)的相關(guān)資料,MongoDB作為一個(gè)基于分布式文件存儲的數(shù)據(jù)庫,近兩年大受追捧。數(shù)據(jù)靈活的存取方式和高效的處理使得它廣泛用于互聯(lián)網(wǎng)應(yīng)用,需要的朋友可以參考下2016-12-12Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08MongoDB中實(shí)現(xiàn)多表聯(lián)查的實(shí)例教程
數(shù)據(jù)庫應(yīng)用在我們的生活中是很常見的,在編輯一些應(yīng)用以及軟件的時(shí)候都需要用到數(shù)據(jù)庫來存儲數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MongoDB中實(shí)現(xiàn)多表聯(lián)查的相關(guān)資料,需要的朋友可以參考下2022-07-07CentOS 6.5 x64系統(tǒng)中安裝MongoDB 2.6.0二進(jìn)制發(fā)行版教程
這篇文章主要介紹了CentOS 6.5 x64系統(tǒng)中安裝MongoDB 2.6.0二進(jìn)制發(fā)行版教程,本文分為6個(gè)步驟完成MongoDB的安裝和啟動,需要的朋友可以參考下2015-01-01