原文:点击打开链接

MongoDB分片

分片(sharding)是将数据拆分,将其分散在不同的机器上的过程。MongoDB支持自动分片

片键(shard
key)设置分片时,需要从集合里面选一个键,用该键作为数据拆分的依据,此键就叫片键

分片一般有以下三部分组成:

片     可以是普通的mongod进程,也可以是副本集。

但是即使一片内有多台服务器,也只能有一个主服务器,其他的服务器保存相同的数据

Mongos

就是mongodb的路由器进程,它路由所有请求,然后将结果聚合。它不保存存储数据或配置信息

它本身并不存储数据或配置信息(但会缓存配置服务器信息)

配置服务器

存储集群的配置信息:数据和片的对应关系

Mongos不会永久存放数据,所以需要个地方存放分片配置

环境规划

 

Dbpath

logpath

port

备注

1

/data/mongodb/conf

/data/mongodb/logs/conf.log

10000

配置服务器

2

——

/data/mongodb/logs/mongos.log

20000

mongos

3

/data/mongodb/shard1

/data/mongodb/logs/shard1.log

30000

分片1

4

/data/mongodb/shard2

/data/mongodb/logs/shard2.log

40000

分片2

创建db|logpath目录

~]# mkdir /data/mongodb/conf /data/mongodb/shard{1,2}

~]# mkdir /data/mongodb/logs/

启动配置服务

#配置服务器要最先启动,因为mongos会用它其上的配置信息

~]# mongod --dbpath /data/mongodb/conf --logpath /data/mongodb/logs/conf.log --logappend --fork --port 10000

about to fork child process, waiting until server is ready for connections.

forked process: 14234

child process started successfully, parent exiting

启动路由服务

#mongos进程不需要数据目录

~]# mongos --port 20000 --configdb 192.168.211.217:10000 --logpath /data/mongodb/logs/mongos.log  --logappend --fork

2015-01-15T17:21:13.758+0800 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: 15361

child process started successfully, parent exiting

启动分片服务

~]#mongod --fork --dbpath /data/mongodb/shard1 --logpath /data/mongodb/logs/shard1.log --logappend -port 30000

about to fork child process, waiting until server is ready for connections.

forked process: 15426

child process started successfully, parent exiting

~]#mongod --fork --dbpath /data/mongodb/shard2 --logpath /data/mongodb/logs/shard2.log --logappend -port 40000

about to fork child process, waiting until server is ready for connections.

forked process: 15515

child process started successfully, parent exiting

添加分片

#查看mongos的端口

~]# netstat  -ntpl|grep mongos

tcp        0      0 0.0.0.0:20000               0.0.0.0:*                  
LISTEN      15361/mongos

#连接刚才启动的mongos(192.168.211.217:20000)

~]# /usr/local/mongodb/bin/mongo --port 20000

MongoDB shell version: 2.6.6

connecting to: 127.0.0.1:20000/test

mongos了mongos> use
admin

switched to db admin

mongos> db.runCommand({addshard:"192.168.211.217:30000",allowLocal:true })

{ "shardAdded" : "shard0000", "ok" : 1 }

mongos> db.runCommand({addshard:"192.168.211.217:40000",allowLocal:true })

{ "shardAdded" : "shard0001", "ok" : 1 }

注:allowLocal:true当路由进程和分片在同一台机器上要指定allowLocal为true

mongos进程

mongos> use config

switched to db config

mongos> db.shards.find()

{ "_id" : "shard0000", "host" : "192.168.211.217:30000" }

{ "_id" : "shard0001", "host" : "192.168.211.217:40000" }

切分数据

默认的是不会将存储的每条数据进行分片处理,需要在数据库和集合的粒度上都开启分片功能

test库的分片功能#连接emp集合#对集合进行分片(

mongos> use admin

switched to db admin

mongos> db.runCommand({"shardcollection":"test.emp","key":{"_id":1}})

{ "collectionsharded" : "test.emp", "ok" : 1 }

mongos> use config

switched to db config

mongos> db.databases.find()

{ "_id" : "admin", "partitioned" : false, "primary" : "config" }

{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }

true则表示开启了分片功“primary”,字符串。这个值与“大本营

mongos> db.collections.find()

{ "_id" : "test.emp", "lastmod" : ISODate("2015-01-15T09:48:49.919Z"), "dropped" : false, "key" : { "_id" : 1 }, "unique" : false, "lastmodEpoch" : ObjectId("54b78d0167f270682893cda6")
}

mongos> db.chunks.find()

{ "_id" : "test.emp-_id_MinKey", "lastmod" : Timestamp(1, 0), "lastmodEpoch" : ObjectId("54b78d0167f270682893cda6"), "ns" : "test.emp", "min" : { "_id" : { "$minKey" : 1 } }, "max" : {
"_id" : { "$maxKey" : 1 } }, "shard" : "shard0000" }

emp集合就按照“_id”片键分散到各个片上                       
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)

MongoDB集群之分片的更多相关文章

  1. MongoDB集群搭建-分片

    MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...

  2. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...

  3. mongodb集群配置分片集群

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

  4. Mongodb集群与分片 2

    前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...

  5. mongodb 集群部署--分片服务器搭建

    部署分片服务器 1.分片 为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片. 2.优势 提供类似现行增·长架构 提高数据可用性 ...

  6. ubuntu docker 下mongodb集群和分片

    首先我们计划启动了三个mongo服务:master,salve,arbiter 1.准备工作 新建文件夹如图(每个文件夹下面有db和configdb文件夹): 生成认证文件并修改权限 openssl ...

  7. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  8. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  9. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

随机推荐

  1. input里面placeholder水平居中

    <style type="text/css">input::-ms-input-placeholder{text-align: center;}input::-webk ...

  2. ajax实现异步校验

    1.ajax介绍 见过百度的搜索框吗?当你输入一个关键词,下面立马会出现一些相关的热词,这就是用ajax做到的. 2.环境设想: 有一个注册页面.jsp <span id="mess& ...

  3. Django的CBV和FBV

    一.FBV FBV(function base views) 就是在视图里使用函数处理请求,也是我们最开始接触和使用的方式,普通项目中最常见的方式. urls.py 1 2 3 4 urlpatter ...

  4. Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase

    上篇博客聊了<git分支管理之rebase 以及 cherry-pick相关操作>本篇博客我们就以Learning Git中的关卡进行展开.下方列举了LearningGit中的 merge ...

  5. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  6. C++/C高质量编程指南-笔记

    复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...

  7. 在ASP.NET MVC中使用Web API和EntityFramework构建应用程序

    最近做了一个项目技术预研:在ASP.NET MVC框架中使用Web API和EntityFramework,构建一个基础的架构,并在此基础上实现基本的CRUD应用. 以下是详细的步骤. 第一步 在数据 ...

  8. vue2.0 组织机构树形选择组件(类似elementui <el-transfer> 与 <el-tree> 两个标签的结合)

    1. 效果图 2. 实现:   三级(部门或人员的树形选择) 3. 模拟数据说明:  fake.js name:  显示的名称(同时也是源码中 for 循环单一的key ,  如果真实数据存在名字有重 ...

  9. SpringBoot学习之Json数据交互

    最近在弄监控主机项目,对javaweb又再努力学习.实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据展示成了一种固定的开发模式.像thymele ...

  10. 零基础2018如何系统地学习python?

    首先告诉你的是,零基础学习开始系统学习Python肯定难,Python的专业程度本身就不简单,学习这事本来就是一件非常煎熬的事情,人都不愿意学习,可是没办法,为了生存掌握一个技能,你必须学,如果你认真 ...