1. 今天上午遇到一個有關host設置一部分是localhost另一部分是hostname,造成向sharding添加shard的時候失敗。特紀錄下來。 問題:一個已存在的sharding各個shard都是本機的其他的mongod進程,在當初添加shard的時候,db.runCommand({addshard:"localhost:po
1. 今天上午遇到一個有關host設置一部分是localhost另一部分是hostname,網站空間,造成向sharding添加shard的時候失敗。特紀錄下來。
問題:一個已存在的sharding各個shard都是本機的其他的mongod進程,在當初添加shard的時候,db.runCommand({addshard:"localhost:port"})。后來又在本機配置了一個replSet.問題就來了。replSet布署成功后,其中的各個節點的host使用的是hostname.這樣一來,當我將replSet添加到sharding的時候報錯。因為sharding的各個節點如果都是本機的其他進程的話,在設置host的時候要么全部使用localhost要么全部使用hostname,如果混用會報錯。
解決過程:剛開始我打算將replSet的各個節點的host改成localhost.但是在reconfig的時候報錯。報錯截圖如下:
之后考慮將已經添加到sharding中各個shard的host改成hostname.修改方法是use config;db.shards.update({_id:xx},{host:"xx"});這回修改成功了。之后就簡單了。
2. 從sharding當中移除一個shard。需要將存儲在將被移除的shard中數據移到其他的shard中。移除完成后,被移除的shard就沒有數據了。
(一)移除一個shard. use admin; db.runCommand({removeshard:"name"});
(二)執行結果如上圖,需要注意的是,note有提示說需要執行movePrimary操作。這是因為被移除的shard是某幾個庫的大本營。如果是這種情況,就需要在數據移除完之后執行movePrimary操作,為這幾個庫設置新的大本營。需要設置新的大本營的幾個庫這里也已經給出來了,例如dbsToMove的值 。如果被移除的shard不存在是任何一個庫的大本營,那么就不需要執行movePrimary.如下圖
(三)如上圖,名為shard0001的shard并不是哪個庫的大本營,因此在被移除的時候,結果輸出中并沒有類似于移除shard0000的時候有note與dbsToMove這兩個值。需要注意的是,被移除的shard是某幾個庫的大本營,不管是否有庫不參加分片,都需要為庫設置新的大本營。如下圖
(四)在數據遷移之前sar的partitioned的值是false,遷移完成執行movePrimary操作后,sar的partitioned的值仍是false.如下圖。
(五)在移除數據過程中,由于網絡與數據量的原因,可能需要花費不同的時間。執行db.runCommand({removeshard:"name"})命令可以查看數據遷移的進度。
(六)如上圖,通過執行db.runCommand({removeshard:"name"})命令不但可以開始移除shard,還可以在移除的過程中查看數據遷移的進度。remaining的值就表示數據遷移的進度。其中chunks代表還剩多少塊數據需要被遷移。當chunks的值等于0時代表數據遷移完成。dbs的值代表還剩多少個庫需要設置新的大本營。movePrimary操作要等到數據遷移完成之后再進行。也就是當chunks的值等于0后才可以執行movePrimary操作。
(七)如上圖,chunks的值等于0代表數據遷移已經完成。可以開始movePrimary操作。
(八)如上圖,將庫foo,too重新設置大本營為rs0這個shard.操作完成后,香港虛擬主機,可以查看整個移除進度了。
(九)如上圖,代表整個移除過程已經全部完成。這個時候就可以放心的停掉shard0000這個shard了。
,美國服務器
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com