本文主要讲述MongoDB的分片以及MongDB如何配置分片服务,设置ChunkSize大小。
1 MongoDB分片概述
分片需要如下要素:
- 要有N个MongoD服务器存储数据做片节点
- 要有Config Server维护meta信息
- 要启动MongoS做路由
- 要设定好数据的分片规则(Config Server才能维护)
2 启动过程
2.1 启动两台 shard 实例
mongod --dbpath /home/m17/ --logpath /home/mlog/m17.log --fork --port 27017 --smallfiles
mongod --dbpath /home/m18/ --logpath /home/mlog/m18.log --fork --port 27018 --smallfiles
2.2 启动 Config Server 服务器
mongod --dbpath /home/m20/ --logpath /home/mlog/m20.log --fork --port 27020 --configsvr
2.3 启动 MongoS 服务器
mongos --logpath /home/mlog/m30.log --port 30000 --configdb 192.168.21.130:27020 --fork
2.4 为 Config Server 添加分片节点
root@vv2x:/home/michael# mongo --port 30000
MongoDB shell version: 3.2.0
connecting to: 127.0.0.1:30000/test
Welcome to the MongoDB shell.
mongos> sh.addShard('192.168.21.130:27017');
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard('192.168.21.130:27018');
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> sh.sta
mongos> sh.status();
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("57198ba481bf26385e2a2bc1")
}
shards:
{ "_id" : "shard0000", "host" : "192.168.21.130:27017" }
{ "_id" : "shard0001", "host" : "192.168.21.130:27018" }
active mongoses:
"3.2.0" : 1
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
2.5 为 Config Server 设置分片规则
mongos> sh.enableSharding('shop'); #设置某个数据库开启分片
{ "ok" : 1 }
mongos> sh.shardCollection('shop.goods', {goods_id: 1});
# 设置某个collection的分片规则,依据goods_id分片, goods_id为片键
{ "collectionsharded" : "shop.goods", "ok" : 1 }
3 MongoDB chunk 的规则
- N篇文档形成一个块
Chunk
, 优先放在某个片上。 - 当这片上的chunk,与另一个片的chunk,区别比较大时,(>=3),会把本片上的chunk,移到另一个片上。
- 以chunk为单位,维护片之间的平衡。
3.1 更改 ChunkSize
# 登陆到MongoS服务器
use config;
db.settings.save({_id: 'chunksize', value: 1}); # 单位为M