首先我們要移除的分片之後再次新增此分片時會出現新增失敗的情況,需要在新增的分片上登入進行刪除此分片之前資料庫的歷史資料比如testdb,刪除分片上的資料庫之後就可重新新增此分片到mongos中
1、執行removeshard命令
db.runcommand( )
「注意:該命令至少執行兩次才能成功刪除,執行到state為completed才真正刪除,否則就是沒用刪除成功,該分片處於"draining" : true狀態,該狀態下不但該分片沒用刪除成功,而且還影響接下來刪除其他分片操作,遇到該狀態再執行一次removeshard即可,最好就是刪除分片時一直重複執行刪除命令,直到state為completed;
還有乙個需要注意的地方就是:被成功刪除的分片如果想要再加入集群時,必須將data資料目錄清理乾淨才可以再加入集群,否則即使能加入成功也不會儲存資料,集合都不會被建立
另外:在刪除分片的時有可能整個過程出現無限"draining" : true狀態,等多久還是這樣,而且分片上面的塊乙個都沒有移動到別的分片,解決辦法是:在config的config資料庫的shard集合中找到該分片的資訊,並將draining欄位由true改為false,再繼續試著刪除操作」
上面這句會立即返回,實際在後台執行。
2、檢視遷移狀態
我們可以反覆執行上面語句,檢視執行結果。
db.runcommand( ) , ok: 1 }
從上面可以看到,正在遷移,還剩下42塊沒遷移完。
當remain為0之後,這一步就結束了。
3、移出非shard資料(如果開始就知道是primary可以直接執行 步驟3和4即可,1和2不需要執行)
如果你要刪除的shard分片恰好是primary,那麼執行這一步,否則請跳過!
db.runcommand( )
這次就不是立即返回了,需要很久,然後會返回如下:
4、最後的清理
上面步驟都完成後,還需要再執行一次removeshard,清理殘餘資料。
db.runcommand( )
執行成功後,會如下結果:
顯示completed後,就可以安心的關閉mongod的程序了。
mongo 分片事務 MongoDB範圍分片
基於範圍的分片會將資料劃分為由片鍵值確定的連續範圍。在此模型中,具有 接近 片鍵值的文件可能位於相同的塊或分片中。這允許在連續範圍內讀取目標文件的高效查詢。但是,如果片鍵選擇不佳,則讀取和寫入效能均可能降低。請參閱片鍵的選擇。如果未配置任何其他選項 例如雜湊分片或區域所需的其他選項 則基於範圍的分片...
搭建mongodb分片
這是一種將海量的資料水平擴充套件的資料庫集群系統,資料分表儲存在sharding的各個節點上,使用者通過簡單的配置就可以很方便地構建乙個分布式mongodb集群。mongodb 的資料分塊稱為 chunk。每個 chunk 都是 collection中一段連續的資料記錄,通常最大尺寸是 200mb,...
MongoDB分片技術
在mongodb裡面存在另一種集群,就是分片技術,跟sql server的表分割槽類似,我們知道當資料量達到t級別的時候,我們的磁碟,記憶體 就吃不消了,針對這樣的場景我們該如何應對。一 分片 mongodb採用將集合進行拆分,然後將拆分的資料均攤到幾個片上的一種解決方案。下面我對這張 釋一下 人臉...