Mongodb 分片配置

1.新建dbs目录以及日志目录

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


2.启动两个mongod服务来存放分片: 

 mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017

 mongod --dbpath /home/m18 --logpath /home/mlog/m18.log --fork --port 27018


3.启动一个configsvr来进行印射

 mongod --dbpath /home/m20 --logpath /home/mlog/m20.log --fork --port 27020 --configsvr

注:configsvr不存储真正的数据,而是存储meta信息,即“某条数据在哪个片上”的信息,mongos查询某条数据时,要先找configsvr,询问得到该数据在哪个shard上


4.启动路由器 mongos
 mongos --logpath /home/mlog/m30.log --port 30000 --configdb 123.206.60.217:27020 --fork   #指明路由器和configsvr之间的关系(绑定)


5.进入mongo,实则为路由的服务中

mongo --port 30000


6.在路由器中增加片

 sh.addShard('123.206.60.217:27017')
 sh.addShard('123.206.60.217:27018')

增加分片之后的状态为Mongodb 分片配置_第1张图片

7.声明某个库是可以分片操作的:
 sh.enableSharding('shop')
 sh.shardCollection('shop.goods',{goods_id:1})Mongodb 分片配置_第2张图片

8.进入刚刚声明的那个表,插入数据

注:插入数据之后,可能出现的情况是,数据都存到了一个片里面,另一个片里没有数据,主要原因是chunk块的值默认是64M比较大,而我们插入的数据量可能有点小,这时候需要修改chunk的初始值,之后插入数据量比较大时我们可以看到分片的情况了。


9.修改chunk值

use config
db.settings.find()查看chunk值的大小
db.settings.save({_id:'chunksize',value:NumberLong(1)})#进行修改
sh.status()

Mongodb 分片配置_第3张图片

指定chunk后插入数据的情况是:Mongodb 分片配置_第4张图片


10.我们也可以手动预先分片,然后再插入数据

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

预先分片之后查看分片状态,可以观察到chunk在两个分片的动态变化

Mongodb 分片配置_第5张图片Mongodb 分片配置_第6张图片

Mongodb 分片配置_第7张图片

 

大概流程差不多是这个样子,具体情况是什么样,还是实践一下才能知道。


你可能感兴趣的:(mongodb)