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')

增加分片之后的状态为

7.声明某个库是可以分片操作的:
 sh.enableSharding('shop')
 sh.shardCollection('shop.goods',{goods_id:1})

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

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


9.修改chunk值

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


指定chunk后插入数据的情况是:


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在两个分片的动态变化


 

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值