Mongodb 刪除添加分片與非分片表維護

Mongodb 刪除添加分片與非分片表維護

 更新時間:2016年01月15日 09:10:01   做者:aqszhuaihuai    我要評論mongodb

MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。經過本文給你們介紹Mongodb 刪除添加分片與非分片表維護的相關知識,對此文感興趣的朋友一塊兒學習吧數據庫

 

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。分佈式

MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。性能

1、如何移除分片學習

一、確認balancer已經開啓this

mongos> sh.getBalancerState()
truespa

二、移除分片.net

注:在admin db下執行命令。rest

?code

1

2

3

4

5

6

7

8

9

mongos> use admin

switched to db admin

mongos> db.runCommand( { removeShard: "shard3" } )

{

"msg" : "draining started successfully",

"state" : "started",

"shard" : "shard3",

"ok" : 1

}

三、檢查遷移的狀態

一樣執行

?

1

2

3

4

5

6

7

8

9

10

11

12

mongos> use admin

switched to db admin

mongos> db.runCommand( { removeShard: "shard3" } )

{

"msg" : "draining ongoing",

"state" : "ongoing",

"remaining" : {

"chunks" : NumberLong(3),

"dbs" : NumberLong(0)

},

"ok" : 1

}

remaining中的chunks表示還有多少數據塊未遷移。

四、移除未分片數據

In a cluster, a database with unsharded collections stores those collections only on a single shard.
That shard becomes the primary shard for that database. (Different databases in a cluster can have different primary shards.)
WARNING
Do not perform this procedure until you have finished draining the shard.
1)To determine if the shard you are removing is the primary shard for any of the cluster's databases, issue one of the following methods:
sh.status()
db.printShardingStatus()
In the resulting document, the databases field lists each database and its primary shard.
For example, the following database field shows that the products database uses mongodb0 as the primary shard:
{ "_id" : "products", "partitioned" : true, "primary" : "mongodb0" }
2)To move a database to another shard, use the movePrimary command. For example, to migrate all remaining unsharded data from mongodb0 to mongodb1,
issue the following command:
use admin
db.runCommand( { movePrimary: "products", to: "mongodb1" }) --products爲db name
This command does not return until MongoDB completes moving all data, which may take a long time.
The response from this command will resemble the following:
{ "primary" : "mongodb1", "ok" : 1 }
If you use the movePrimary command to move un-sharded collections, you must either restart all mongos instances,
or use the flushRouterConfig command on all mongos instances before writing any data to the cluster.
This action notifies the mongos of the new shard for the database.
If you do not update the mongos instances' metadata cache after using movePrimary, the mongos may not write data to the correct shard.
To recover, you must manually intervene.

根據上面所說,遷移非分片表 時 最好停機,在運行db.runCommand( { movePrimary: "products", to: "mongodb1" }) 命令完成以後,刷新全部mongos後(全部mongos上運行db.runCommand("flushRouterConfig")),再對外提供服務。固然也能夠從新啓動全部mongos實例 。

五、完成遷移

?

1

2

3

4

5

6

7

8

9

mongos> use admin

switched to db admin

mongos> db.runCommand( { removeShard: "shard3" } )

{

"msg" : "removeshard completed successfully",

"state" : "completed",

"shard" : "shard3",

"ok" : 1

}

若是state爲 completed,表示已完成遷移。

2、添加分片

一、首先確認balancer已經開啓

mongos> sh.getBalancerState()
true

二、執行添加分片的命令

若是出現如下錯誤,刪除目標shard3上的test1數據庫,再次執行命令

?

1

2

3

4

5

6

7

mongos> sh.addShard("shard3/192.168.137.138:27019")

{

"ok" : 0,

"errmsg" : "can't add shard shard3/192.168.137.138:27019 because a local database 'test1' exists in another shard1:shard1/192.168.137.111:27017,192.168.137.75:27017"

}

mongos> sh.addShard("shard3/192.168.137.138:27019")

{ "shardAdded" : "shard3", "ok" : 1 }

最後運行sh.status()命令確認遷移是否成功,可能會花比較長的時間。

以上內容是給你們介紹了Mongodb 刪除添加分片與非分片表維護的所有敘述,但願對你們有所幫助。

您可能感興趣的文章:

相關文章
相關標籤/搜索