1、启动一个新Shard Server 进程
[root@localhost ~]# mkdir /data/shard/s2 [root@localhost ~]# /Apps/mongo/bin/mongod --shardsvr --port 20002 --dbpath /data/shard/s2 --fork --logpath /data/shard/log/s2.log --directoryperdb all output going to: /data/shard/log/s2.log forked process: 6772
2、配置新Shard Server
[root@localhost ~]# /Apps/mongo/bin/mongo admin --port 40000 MongoDB shell version: 1.8.1 connecting to: 127.0.0.1:40000/admin > db.runCommand({ addshard:"localhost:20002" }) { "shardAdded" : "shard0002", "ok" : 1 } > printShardingStatus() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "shard0000", "host" : "localhost:20000" } { "_id" : "shard0001", "host" : "localhost:20001" } { "_id" : "shard0002", "host" : "localhost:20002" } --新增Shard Server databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } test.users chunks: shard0002 2 shard0000 21 shard0001 21 too many chunksn to print, use verbose if you want to force print test.users_2 chunks: shard0001 46 shard0002 1 shard0000 45 too many chunksn to print, use verbose if you want to force print
3、 查看分片表状态,以验证新Shard Server
> use test switched to db test > db.users_2.stats() { "sharded" : true, "ns" : "test.users_2", …… "shard0002" : { --新的Shard Server 已有数据 "ns" : "test.users_2", "count" : 21848, "size" : 2097408, "avgObjSize" : 96, "storageSize" : 2793472, "numExtents" : 5, "nindexes" : 1, "lastExtentSize" : 2097152, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 1277952, "indexSizes" : { "_id_" : 1277952 }, "ok" : 1 } }, "ok" : 1 } >
我们可以发现,当我们新增Shard Server 后数据自动分布到了新Shard 上,这是由MongoDB内部自已实现的。