接这篇博客:

http://www.cnblogs.com/xiaoit/p/4479066.html

这里不再说明安装过程。

1:分片简介

分片是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。MongoDB的数据分块称为chunk。每个chunk都是Collection中一段连续的数据记录,通常最大尺寸是200MB,超出则生成新的数据块。

2:

配置MongoDB的Sharding Cluster需要3中角色:
a:Shard Server
Shard Server 即存储数据的分片,每个Shard可以是一个实例,也可以是一个副本集。为了实现每个Shard内部的auto-failover,官方建议,每一个Shard为一组Replica Set .
b:Config Server
为了将一个特定的collection存放在多个shard中。需要为collection指定一个shard key,例如{age:1}.shard key 决定了数据存放在哪个分片中。Config Server 就是用来存储所有Shard节点的配置信息、分片的分布情况、该集群中所有DB和collection的sharding配置信息。
c:Route Process
这是一个前端的路由进程,客户端由此进入。然后会询问Config Server需要到哪个Shard上查询或者保存记录?再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需原封不动的将原来发给Mongod的查询或者更新请求发给Route Process即可。不用关心文档到底存储在哪个Shard上面。

在一台机器上模拟环境配置分片
Shard Server 1:27017
Shard Server 2:27018
Config Server :27019
Route Process:40000

3:创建数据目录并保证有读写权限

mkdir -p ./data/shard/{s01,s02}

4:启动Shard Server1:

[root@localhost mongodb]# ./bin/mongod --port 27017 --dbpath ./data/shard/s01 --logpath ./log/s01 --fork
about to fork child process, waiting until server is ready for connections.
forked process: 54045
child process started successfully, parent exiting

  

启动Shard Server2:

[root@localhost mongodb]# ./bin/mongod --port 27018 --dbpath ./data/shard/s02 --logpath ./log/s02 --fork
about to fork child process, waiting until server is ready for connections.
forked process: 54065
child process started successfully, parent exiting

  

启动Config Server

[root@localhost mongodb]# mkdir -p ./data/shard/config
[root@localhost mongodb]# ./bin/mongod --port 27019 --dbpath ./data/shard/config --logpath ./log/configlog --fork
about to fork child process, waiting until server is ready for connections.
forked process: 54111
child process started successfully, parent exiting

注意:我们完全可以像启动普通Mongod服务一样启动,不需要添加-shardsvr和configsvr参数。因为两个参数的作用就是改变启动端口的,这里我们自行指定端口就可以了。

启动Route Process

[root@localhost mongodb]# ./bin/mongos --port 40000 --fork --logpath ./data/shard/route.log --chunkSize 1 --configdb localhost:27019
2015-05-05T01:28:04.996-0700 warning: running with 1 config server should be done only for testing purposes and is not recommended for production
about to fork child process, waiting until server is ready for connections.
forked process: 54169
child process started successfully, parent exiting

chunkSize :指定chunk的大小,默认为200M。为了方便测试指定为1M。意思是当这个分片中插入的数据大于1M时候开始数据转移。

5:配置Sharding

此时直接连mongos路由进程即可

[root@localhost mongodb]# ./bin/mongo admin --port 40000
MongoDB shell version: 2.6.9
connecting to: 127.0.0.1:40000/admin
mongos>
[root@localhost mongodb]# ./bin/mongo admin --port 40000
MongoDB shell version: 2.6.9
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({addshard:"localhost:27017"})
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> db.runCommand({addshard:"localhost:27018"})
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> db.runCommand({enablesharding:"test"})
{ "ok" : 1 }
mongos> db.runCommand({shardcollection:"test.users",key:{id:1}})
{ "collectionsharded" : "test.users", "ok" : 1 }
mongos>

  

注意这里我们要注意片键的选择,选择片键时需要根据具体业务的数据形态来选择,切不可随意选择,实际中尤其不要轻易选择自增_id作为片键,除非你很清楚你这么做的目的,根据经验推荐一种较合理的片键方式,“自增字段+查询字段”。另外这里说明一点,分片的基本机制:分片总是试图将现有数据均分到所有的分片上。举例说,现在有两个分片,我已经选择了id作为片键,假定插入的id是自增的,如1——10000,则分片后的结果是均分,即1——5000在片A,5000——10000在片B,当然,不一定有这么精确,但却是保证尽量的平均的,以此类推,如果有三块分片,同样均分三等分。还需要说明的是,一开始插入数据时,数据是只插入到其中一块分片上的,插入完毕后,mongodb内部开始在各片之间进行数据的移动,这个过程可能不是立即的,mongodb足够智能会根据当前负载决定是立即进行移动还是稍后移动。
在插入数据后,立马执行db.users.stats();两次可以验证如上所说。

MongoDB分片配置系列一:的更多相关文章

  1. mongodb分片配置

    通过YUM库自动安装Mongodb 手动安装配置mongodb 验证mongodb主从复制过程 验证mongodb副本集并实现自动切换 实验mongodb使用gridfs存放一个大文件 1.创建数据目 ...

  2. windows下的mongodb分片配置

    1. 分片服务器设置mongod -port 10001 -dbpath=F:/DbSoft/mongodb/rs_data/master -directoryperdb --shardsvr -re ...

  3. windows环境下Mongodb分片配置

    使用MongoDB的GridFS来存储文件,以前一直使用单个服务,分布式环境也一直没有配置成功,今天参考了几位大神的文章终于配置成功,再也不用担心文件存储的性能和安全啦.以下是自己部署的过程和示例,记 ...

  4. MongoDB分片配置 优化 不错

    简单注解:mongos 路由进程, 应用程序接入mongos再查询到具体分片,监听端口默认27017config server 路由表服务, 每一台都具有全部chunk的路由信息 shard为数据存储 ...

  5. MongoDB基础教程系列--第九篇 MongoDB 分片

    1.分片介绍 分片(sharding)是将数据拆分,将其分散存到不同机器上的过程.MongoDB 支持自动分片,可以使数据库架构对应用程序不可见.对于应用程序来说,好像始终在使用一个单机的 Mongo ...

  6. MongoDB Sharding分片配置

    Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...

  7. mongodb数据库集群及sharding分片配置

    复制集群的配置 1.安装mongodb数据库 在主节点和从节点上都安装mongodb # rpm -ivh mongo-10gen-2.4.6-mongodb_1.x86_64.rpm mongo-1 ...

  8. mongoDB系列之(三):mongoDB 分片

    1. monogDB的分片(Sharding) 分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式. mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上 ...

  9. 【MangoDB分片】配置mongodb分片群集(sharding cluster)

    配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monod ...

随机推荐

  1. Mysql 根据id查所有父级或子级

    mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到) 由于mysql 不支持类似 oracle with ...connect的 递归查询语法 之前一直以为类似的查询要么用存储 ...

  2. Swift - CALayer的contents属性动画

    Swift - CALayer的contents属性动画 效果 源码 https://github.com/YouXianMing/Swift-Animations // // LiveImageVi ...

  3. 阿里云上部署kafka--遇到的坑

    阿里云防火墙关闭,并且配置规则.不然会导致访问不到服务. 问题一: Caused by: java.net.UnknownHostException: iZuf68tztea6l5ccdz7wemZ: ...

  4. Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别

    Djangon生产环境静态资源的处理 Django 关闭DEBUG模式后,就相当于是生产环境了. Django框架一旦作为生产环境,它的静态文件访问接口就不应该从Django框架中走,必须在Djang ...

  5. SpringBoot 使用Swagger2打造在线接口文档(附汉化教程)

    原文地址: https://www.jianshu.com/p/7e543f0f0bd8 SpringBoot + Swagger2 UI界面-汉化教程 1.默认的英文界面UI 想必很多小伙伴都曾经使 ...

  6. HTTP Error 502.5 – Process Failure

    https://www.cnblogs.com/lookerblue/p/7101641.html http://www.cnblogs.com/lookerblue/p/7102040.html h ...

  7. SQL Server 函数 LEN 与 DATALENGTH的区别

    http://blog.csdn.net/Hello_World_wusu/article/details/4667452 DATALENGTH()函数返回一个用于对值进行管理的字节数,这有助于揭示不 ...

  8. 开闭原则(Open Closed Principle,OCP)

    遵循开闭原则设计出的模块具有两个主要特征: 对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的 ...

  9. 样条之CatmullRom

    所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面.CatmullR ...

  10. SD内存卡禁止写入只读怎么办?另类SPI模式修复坏卡

    这几天很郁闷,买的32G TF卡老出问题,三星的标,不知道是不是正品,标称C10,且不说是不是真的三星和真的C10,反正测试一下容量倒是真的,价格么也比较亲民,好像是69块?   哎,可惜呀,好景不长 ...