MongoDB的Shard集群來說,添加一個(gè)分片很簡單,AddShard就可以了。
平武ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!但是縮減集群(刪除分片)這種一般很少用到,但是有些場景,必須把它上面的數(shù)據(jù)自動遷移到其他Shard上。
mongodb遷移分片
1 db.runCommand( { removeshard:"your_shard_name" } )
3 { msg : "draining startedsuccessfully" , state: "started" , shard :"mongodb0",ok : 1 }
上面這句會立即返回,實(shí)際在后臺執(zhí)行。
我們可以反復(fù)執(zhí)行上面語句,查看執(zhí)行結(jié)果。
1 db.runCommand( { removeshard:"your_shard_name" } )
3 { msg: "draining ongoing" ,state: "ongoing", remaining: { chunks: 42, dbs : 1 }, ok: 1 }
從上面可以看到,正在遷移,還剩下42塊沒遷移完。
當(dāng)remain為0之后,這一步就結(jié)束了。
1 db.runCommand( { movePrimary:"testdb", to: "shard2" })
這次就不是立即返回了,需要很久,然后會返回如下:
1 { "primary" :"mongodb1", "ok" : 1 }
上面步驟都完成后,還需要再執(zhí)行一次RemoveShard,清理殘余數(shù)據(jù)。
1 db.runCommand( { removeshard: "shard1"} )
執(zhí)行成功后,會如下結(jié)果:
1 { msg: "remove shard completedsuccesfully", stage: "completed", host: " shard1", ok: 1 }
顯示completed后,就可以安心的關(guān)閉mongod的進(jìn)程了。
注意官方關(guān)于是否需要運(yùn)行movePrimary的說明:
也就是說,如果在這個(gè)片上有非分片的collection,這樣的話,分片的數(shù)據(jù)合到其他片上了,那么剩下的非分片數(shù)據(jù),沒法通過合并分片的方式合到其他服務(wù)器上,所以這時(shí)要運(yùn)行一個(gè)movePrimary命令將這些非分片的數(shù)據(jù)移到另一個(gè)服務(wù)器上。db.runCommand( { movePrimary: "testdb", to: "shard1"})
還有一個(gè)官方說明需要注意的是:
Warning
Do not run themovePrimary until you have finished draining the shard
也就是說,一定要等到分片數(shù)據(jù)遷移完了,再運(yùn)行movePrimary命令?。?!
而且這句命令不像removeshard是異步的,這個(gè)movePrimary命令會等到將所有非分片數(shù)據(jù)都移到其他服務(wù)器后,才響應(yīng),所以時(shí)間有可能會比較長,主要還是看這個(gè)服務(wù)器上,非分片數(shù)據(jù)有多少。
另外,movePrimary執(zhí)行完后,還記得將db.runCommand({removeshard:"shardx"})再運(yùn)行一遍,直到看到如下結(jié)果{ msg: "remove shard completed successfully" , stage:"completed", host: "mongodb0", ok : 1 }
到此為止,遷移才真正完成,可以放心地關(guān)閉mongod。
過程: 導(dǎo)出帶有sharding 的集合, 刪除集合 ,導(dǎo)入集合
1.導(dǎo)出集合
/usr/local/mongodb/bin/mongodump--host 127.0.0.1:30000 -d testdb -c table1 -o testdb/
2.禁用分片的自動平衡
> use config
>db.settings.update( { _id:"balancer" }, { $set : { stopped:true } } ,true );
>db.printShardingStatus()
3.刪除集合
db.table1.drop();
4.導(dǎo)入集合
/usr/local/mongodb/bin/mongorestore --host 127.0.0.1:30000 -d testdb testdb/
執(zhí)行 db.printShardingStatus() ,查看分片概要
發(fā)現(xiàn)集合table1 的 sharding 功能已經(jīng)被關(guān)閉!
mongodb在做自動分片平衡的時(shí)候,或引起數(shù)據(jù)庫響應(yīng)的緩慢,可以通過禁用自動平衡以及設(shè)置自動平衡進(jìn)行的時(shí)間來解決這一問題。
(1)禁用分片的自動平衡
> use config
>db.settings.update( { _id:"balancer" }, { $set : { stopped:true } } ,true );
恢復(fù)動態(tài)平臺:
use config
db.settings.remove({"_id":"balancer"});
(2)自定義自動平衡進(jìn)行的時(shí)間段
> use config
>db.settings.update({ _id :"balancer" }, { $set : { activeWindow : { start :"21:00", stop :"9:00" } } },true )
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。