mongodb移除分片刪除分片上數據庫和添加分片

mongodb移除分片刪除分片上數據庫和添加分片

2018年01月12日 19:09:23 冰雪Love齊跡 閱讀數 5367更多mongodb

分類專欄: mongodb學習數據庫

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。學習

本文連接:http://www.javashuo.com/article/p-rffoeayc-dy.htmlspa

首先咱們要移除的分片以後再次添加此分片時會出現添加失敗的狀況,須要在添加的分片上登陸進行刪除此分片以前數據庫的歷史數據好比testdb,刪除分片上的數據庫以後就可從新添加此分片到mongos中.net

一、執行RemoveShard命令 blog

db.runCommand( { removeshard: "your_shard_name" } ) 
{ msg : "draining started successfully" , state: "started" , shard :"mongodb0" , ok : 1 } 
「注意:該命令至少執行兩次才能成功刪除,執行到state爲completed才真正刪除,不然就是沒用刪除成功,該分片處於"draining" : true狀態,該狀態下不但該分片沒用刪除成功,並且還影響接下來刪除其餘分片操做,遇到該狀態再執行一次removeshard便可,最好就是刪除分片時一直重複執行刪除命令,直到state爲completed; 

還有一個須要注意的地方就是:被成功刪除的分片若是想要再加入集羣時,必須將data數據目錄清理乾淨才能夠再加入集羣,不然即便能加入成功也不會存儲數據,集合都不會被建立 

另外:在刪除分片的時有可能整個過程出現無限"draining" : true狀態,等多久仍是這樣,並且分片上面的塊一個都沒有移動到別的分片,解決辦法是:在config的config數據庫的shard集合中找到該分片的信息,並將draining字段由True改成False,再繼續試着刪除操做」 

上面這句會當即返回,實際在後臺執行。 

二、查看遷移狀態 
咱們能夠反覆執行上面語句,查看執行結果。 
db.runCommand( { removeshard: "your_shard_name" } ) { msg: "draining ongoing" , state: "ongoing" , remaining: { chunks: 42, dbs : 1 }, ok: 1 } 
從上面能夠看到,正在遷移,還剩下42塊沒遷移完。 
當remain爲0以後,這一步就結束了。 

三、移出非Shard數據(若是開始就知道是primary能夠直接執行 步驟3和4便可,1和2不須要執行) 
若是你要刪除的Shard分片剛好是primary,那麼執行這一步,不然請跳過! 
db.runCommand( { movePrimary: "數據庫名稱", to: "分片名稱" }) 

此次就不是當即返回了,須要好久,而後會返回以下: 
{ "primary" : "mongodb1", "ok" : 1 } 

四、最後的清理 
上面步驟都完成後,還須要再執行一次RemoveShard,清理殘餘數據。 
db.runCommand( { removeshard: "mongodb0" } ) 
執行成功後,會以下結果: 
{ msg: "remove shard completed succesfully" , stage: "completed", host: "mongodb0", ok : 1 } 

顯示completed後,就能夠安心的關閉mongod的進程了。進程

相關文章
相關標籤/搜索