Fork me on GitHub

Mongodb 分片

mkdir -p /home/m17 /home/m18 /home/m20 /home/mlog

#声明实例

./bin/mongod --dbpath /home/m17/ --logpath /home/mlog/m17.log --fork --port 27017 --smallfiles
./bin/mongod --dbpath /home/m18/ --logpath /home/mlog/m18.log --fork --port 27018 --smallfiles

#指定为configsvr
./bin/mongod --dbpath /home/m20/ --logpath /home/mlog/m20.log --fork --port 27020 --configsvr

#为路由指定configsvr .
/bin/mongos --logpath /home/mlog/m30.log --port 30000 --configdb 192.168.119.128:27020 --fork

#启动了4个进程

ps aux|grep mongo

#连接路由

./bin/mongo --port 30000

#添加分片

sh.addShard('192.168.119.128:27017')
sh.addShard('192.168.119.128:27018')
sh.status()

#指定库分片

sh.enableSharding('shop')

#指定集合,以某个键分

sh.shardCollection('shop.goods',{goods_id:1})

#查看chunksize默认大小

use config

show tables

db.settings.find()

#默认为64M,修改为1M
db.settings.save({_id:'chunksize',value:1})
#分别查看27017和27018 数据存储情况

use shop 
db.goods.count();

#查看分片情况
sh.status();

既然优先往某个片上插入,当chunk失衡时,再移动chunk,自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象; 服务器之间IO的增加!

#预先分片 

for(var i=1;i<=40;i++) { sh.splitAt('shop.user',{userid:i*1000}) }
以shop.user表为例
1: sh.shardCollection(‘shop.user’,{userid:1}); //user表用userid做shard key

2: for(var i=1;i<=40;i++) { sh.splitAt('shop.user',{userid:i*1000}) } // 预先在1K 2K...40K这样的界限切好chunk(虽然chunk是空的),
这些chunk将会均匀移动到各片上.
3: 通过mongos添加user数据. 数据会添加到预先分配好的chunk上, chunk就不会来回移动了.

 

posted @ 2017-02-06 18:20  迁梦余光  阅读(162)  评论(0编辑  收藏  举报