MongoDB 分片操作
添加分片
use admin
//添加分片节点,每个分片都是一个副本集【allowLocal:true仅仅开发时才将分片配置到本地,生产时不能这样】
db.runCommand({addshard:"localhost:9335",allowLocal:true})
db.runCommand({addshard:"localhost:9336",allowLocal:true})
db.runCommand({addshard:"localhost:9337",allowLocal:true,”maxSize”:20000}) 注意:还可以为不同分片设置大小”maxSize”:20000(20gb)
//要分片的数据库
db.runCommand({enablesharding:"mydb"})
//设置要分片的集合:users集合,name字段为key来分片
db.runCommand({shardcollection:"mydb.users",key:{name:1}})
db.runCommand({shardcollection:"mydb.users",key:{_id:1,name:1,name:1}}) 【如果出现"errmsg" : "please create an index that starts with the shard key before sharding.",请创建索引】
查看分片结果
//查看分区情况
use mydb
db.users.getShardDistribution()
db.users.stats();
向已经分片的数据中,再次添加分片
db.runCommand({addshard:"localhost:9337",allowLocal:true}) 会自动平衡数据
删除分片
db.runCommand({removeshard:"localhost:9335"})
db.runCommand({removeshard:"localhost:9336"})
db.runCommand({removeshard:"localhost:9337"})
//【如果删除的是主节点,还需要】
db.runCommand({"moveprimary" : "mydb","to" : "localhost:9336"})
//【删除完后还需要在执行一次db.runCommand({removeshard:"localhost:xxxx"}) 才能完整删除】
//【观察删除情况:】
use admin
db.printShardingStatus()
//【这种方式不能删除所有分片,最后一个分片是不能删除的】