Mongodb削除スライスと非スライステーブルのメンテナンスの追加


去年のノートは
一、スライスの除去方法
1、balancerがオンになっていることを確認する
mongos> sh.getBalancerState()
true

2、スライスの除去
注意:admin dbでコマンドを実行します.
mongos> use admin
switched to db admin
mongos> db.runCommand( { removeShard: "shard3" } )
{
	"msg" : "draining started successfully",
	"state" : "started",
	"shard" : "shard3",
	"ok" : 1
}

3、移行のステータスを確認する
同様に実行
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は、まだ移行していないデータブロックがどれだけあるかを示します.
4、未スライスデータの除去
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:“mongodb 1”})--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:“mongodb 1”})コマンドが完了すると、
すべてのmongosをリフレッシュした後(すべてのmongosでdb.runCommand(「flushRouterConfig」)を実行し、外部にサービスを提供します.もちろん、すべてのmongosインスタンスを再起動することもできます.
5、移行完了
mongos> use admin
switched to db admin
mongos> db.runCommand( { removeShard: "shard3" } )
{
	"msg" : "removeshard completed successfully",
	"state" : "completed",
	"shard" : "shard3",
	"ok" : 1
}

stateがcompletedの場合、移行が完了したことを示します.
二、スライスの追加
1、まずbalancerがオンになっていることを確認する
mongos> sh.getBalancerState()
true

2、スライスを追加するコマンドを実行する
次のエラーが発生した場合は、ターゲットshard 3のtest 1データベースを削除し、コマンドを再実行します.
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()コマンドを実行して移行が成功したかどうかを確認するには、時間がかかる場合があります.