mongoDB 分片

By | 2019年6月18日

1. monogDB的分片(Sharding)
分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式。

mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上的一种解决方案。

分片模式下,mongoDB实例分为三种:

shards: 存储数据的mongoDB

config: 保存设定的monogDB

routing(mongos): 负责分片处理的mongoDB

2. 配置分片
2.1 试验环境
1 mongos, 1 config, 2 shard

config:  test166:27019
mongos:  test166:27020
shards:  test166:27017,test167:27017
mongoDB都是单台构成,没有使用副本集

2.2 启动config
在test166上启动config实例,端口27019

# mongod –configsvr –dbpath /var/lib/mongo-c –port 27019
2.3 启动 mongos
在test166上启动routing实例,端口27020

# mongos –configdb test166:27019 –port 27020
2.4 启动 shards
在test166和test167上分别启动shards

# /etc/init.d/mongod start
2.5 添加shards
连接monogs

# mongo –port 27020
添加shards

mongos> use admin
mongos> sh.addShard( “test166:27017” )
mongos> sh.addShard( “test167:27017” )
确认

mongos> db.runCommand({listshards:1})

2.6 开启分片
对指定的库开启sharding

mongos> sh.enableSharding(“new”)
指定分片的片键

片键有两种模式:hash模式,range模式

2.6.1 使用hash模式分片

mongos> sh.shardCollection( “new.person”, { “_id”: “hashed” } )
插入数据确认

mongos> use new
mongos> for(var i=0;i<10;i++){db.person.insert({name:”bluejoe”+i});}

使用hash模式,记录在各片上的分布比较平均

2.6.2 使用range模式分片

mongos> sh.shardCollection( “new.person2”, { “name”: 1 } )
插入数据确认

mongos> use new
mongos> for(var i=0;i<100;i++){db.person2.insert({name:”jack”+i});}
2.7 确认分片情况

mongos> sh.status()

mongos> db.printShardingStatus()

在各shard上确认数据分布情况(hash模式)

> use new
> db.person.find()
test166:27017上的数据分布情况

test167:27017上的数据分布情况

2.8 其他
要分片的库原来有数据的情况下,先建index,然后再指定片键

mongos> sh.enableSharding(“new2”)
mongos> use new2
mongos> db.user2.createIndex( { “username”: 1 } )
mongos> sh.shardCollection( “new2.user2”, { “username”: 1 } )
3. 后记
本次测试环境使用mongoDB单台构成,没有使用副本集,使用副本集时的分片配置和上面类似,在此不详述。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注