MongoDB分片

本文主要讲述MongoDB的分片以及MongDB如何配置分片服务,设置ChunkSize大小。


1 MongoDB分片概述

分片需要如下要素:

  1. 要有N个MongoD服务器存储数据做片节点
  2. 要有Config Server维护meta信息
  3. 要启动MongoS做路由
  4. 要设定好数据的分片规则(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值