删除分片
>db.runCommand( { removeshard : "shard_liyan2/127.0.0.1:16002,127.0.0.1:16004"} );
#执行完该命令后。再去观察db.VIDEO.stats()。其中shard2的count数会逐渐减少,而shard2会逐渐增加。这个过程比较慢。视数据量大小。我移动30W数据大概用了10分钟,当全移动完毕后,整个shard2的信息就都没有了。
#完成后可以吧shard2 相关的mongod线程关闭。删掉文件。
##########################################################################################
添加分片 方式一(已有的分片shard2)
登录mongos
>use admin
>db.runCommand( { addshard : "shard_liyan2/127.0.0.1:16002,127.0.0.1:16004",name:"s2",maxsize:20480} );
出现以下错误
db.runCommand( { addshard : "shard_liyan2/127.0.0.1:16002,127.0.0.1:16004",name:"s2",maxsize:20480} );
{
"ok" : 0,
"errmsg" : "can't add shard shard_liyan2/127.0.0.1:16002,127.0.0.1:16004 because a local database 'ISYDB' exists in another s1:shard_liyan1/127.0.0.1:16001,127.0.0.1:16003"
}
原因原来已经有一个shard2了 里面的ISYDB不会被删除。手动删除就可以了。删除时遇到如下错误
db.dropDatabase()
{ "errmsg" : "not master", "ok" : 0 }
原因。所登录的mongod不是主节点。可以通过命令查看 db.isMaster(),换另外一个节点,就可以了
##########################################################################################
添加分片 方式二(新建shard3)
#或是新建一个新的分片再执行如上操作
#新增第三个分片 shard3 复制两份
./mongod -shardsvr -replSet shard_liyan3 -port 16010 -dbpath /home/liyan/data/mongodata/mutildata/shard31 -oplogSize 100 -logpath /home/liyan/data/mongodata/logs/shard31.log -logappend -fork
./mongod -shardsvr -replSet shard_liyan3 -port 16011 -dbpath /home/liyan/data/mongodata/mutildata/shard32 -oplogSize 100 -logpath /home/liyan/data/mongodata/logs/shard32.log -logappend -fork
初始化shard_liyan3的replica set
用mongo连接其中一个mongod,执行:
config={_id:'shard_liyan3',members:[
{_id:0,host:'127.0.0.1:16010'},
{_id:1,host:'127.0.0.1:16011'}
]
}
rs.initiate(config);
登录mongos,切换到use admin 执行如下
db.runCommand( { addshard : "shard_liyan3/127.0.0.1:16010,127.0.0.1:16011",name:"s3",maxsize:20480} );
然后观察 db.VIDEO.stats(),过一会就会多一个分片。s3.数量会在不断的增加。而s1在不断减少。这个就是mongodb内部在自动的搬动数据,达到自动均衡.但不会达到完全均衡。