MongoDB集群之分片
原文:点击打开链接
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集群之分片的更多相关文章
- MongoDB集群搭建-分片
MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...
- Mongodb集群与分片 1
分片集群 Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片. 下面是一个简单的分片集群 ...
- mongodb集群配置分片集群
测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...
- Mongodb集群与分片 2
前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...
- mongodb 集群部署--分片服务器搭建
部署分片服务器 1.分片 为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片. 2.优势 提供类似现行增·长架构 提高数据可用性 ...
- ubuntu docker 下mongodb集群和分片
首先我们计划启动了三个mongo服务:master,salve,arbiter 1.准备工作 新建文件夹如图(每个文件夹下面有db和configdb文件夹): 生成认证文件并修改权限 openssl ...
- MongoDB集群之分片技术应用 —— 学习笔记
课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
随机推荐
- OpenStack和Hadoop的区别
其实,OpenStack和Hadoop不是同一个层次的东西,无法比较,非要说出个区别,那就是:OpenStack是云计算管理平台,应该是属于系统级别的软件,它的主体思想是把资源进行分离,给不同的用户提 ...
- 豆瓣爬虫小记(lowB版)
爬虫小记 学习玩python正则之后,想利用正则知识学学网络爬虫. 需求分析 按照自己平时浏览的网页,留意下哪个网页的信息对自己有价值,分析要爬取哪些网页信息.这里我先爬取简单的静态网页,豆瓣网经典电 ...
- Jmeter Smock Test规范设计
Jmeter Smock Test规范设计 一.Smock Test物料 1.开发运行工具Jmeter,(下载地址: http://jmeter.apache.org/download_jmeter. ...
- HTML5中的Web Notification桌面通知
大家在做一些浏览器端的聊天功能的时候,或者在一些网站跟在线客服咨询的时候,会看到一些消息通知的提示,常见的有浏览器标签页的闪烁和屏幕右侧的消息通知.本篇博客就在这里简单的介绍一下如何实现这样的功能. ...
- iOS-CoreText的那些事【电子书的那些事】
这段时间在搞电子书,把这些天出现的问题归总下,我还是希望电子书的格式包括返回的数据,可直观的反应出客户端想表达的内容:原生的体验还是比较好的,希望对coretext再深入. 1.判断点击的位置是否在某 ...
- SpringMVC源码情操陶冶-InterceptorsBeanDefinitionParser拦截器解析器
解析mvc:interceptors节点 观察下InterceptorsBeanDefinitionParser的源码备注 /** * {@link org.springframework.beans ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- ubuntu下smb的配置
PS: 转自Ubuntu中文论坛 -------------------------------------------------------------------------------- ...
- Install Centrifugo and quick start
Install Centrifugo and quick start Go is a perfect language - it gives developers an opportunity to ...
- iOS开发中UIPopoverController的使用详解
这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController ...