Sharding分片概念
这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。
MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。
要构建一个 MongoDB Sharding Cluster,需要三种角色:
Shard Server
即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。为了实现每个Shard内部的auto-failover,MongoDB官方建议每个Shard为一组Replica Set。关于如何安装及搭建replica set请参考我的另一篇文章 http://gong1208.iteye.com/blog/1558355
Config Server
为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key,例如{age: 1} ,shard key可以决定该条记录属于哪个chunk。Config Servers就是用来存储:所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。
Route Process
这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。
下面我们在同一台物理机器上构建一个简单的 Sharding Cluster:
架构图如下:
- Shard Server 1:27017
- Shard Server 2:27018
- Config Server :27027
- Route Process:40000
实施步骤
步骤一:
启动Shard Server
mkdir -p /opt/mongodb/data/shard/s0--创建数据目录
mkdir -p/opt/mongodb/data/shard/s1
mkdir -p/opt/mongodb/data/shard/log --创建日志目录
/Opt/mongodb/bin/mongod--port 27017 --dbpath /opt/mongodb/data/shard/s0 --fork --logpath/opt/mongodb/data/shard/log/s0.log --启动Shard Server实例1
/Opt/mongodb/bin/mongod--port 27018 --dbpath /opt/mongodb/data/shard/s1 --fork --logpath/opt/mongodb/data/shard/log/s1.log --启动Shard Server实例2
步骤二:
启动Config Server
mkdir -p/opt/mongodb/data/shard/config --创建数据目录
/Opt/mongodb/bin/mongod --port 27027 –dbpath/opt/mongodb/data/shard/config --fork --logpath /opt/mongodb/data/shard/log/config.log --启动Config Server实例
(注意,这里我们完全可以像启动普通mongodb服务一样启动,不需要添加—shardsvr和configsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以)
步骤三:
启动Route Process
/Opt/mongodb/bin/mongos--port 40000 --configdb localhost:27027 --fork --logpath
/opt/mongodb/data/shard/log/route.log--chunkSize 1 --启动RouteServer实例
mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB,为了方便测试Sharding效果,我们把chunkSize指定为 1MB。意思是当这个分片中插入的数据大于1M时开始进行数据转移
步骤四:
配置Sharding
接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点
[root@localhost~]# /Opt/mongo/bin/mongo admin --port 40000 --此操作需要连接admin库
MongoDBshell version: 2.0.1
connectingto: 127.0.0.1:40000/admin
>db.runCommand({ addshard:"localhost:27017" }) --添加 Shard Server
{"shardAdded" : "shard0000", "ok" : 1 }
>db.runCommand({ addshard:"localhost:27018" })
{"shardAdded" : "shard0001", "ok" : 1 }
>db.runCommand({ enablesharding:"test" }) --设置分片存储的数据库
{"ok" : 1 }
> db.runCommand({shardcollection: "test.users", key: { id:1 }}) --设置分片的集合名称。且必须指定Shard Key,系统会自动创建索引
{"collectionsharded" : "test.users", "ok" : 1 }
注意这里我们要注意片键的选择,选择片键时需要根据具体业务的数据形态来选择,切不可随意选择,实际中尤其不要轻易选择自增_id作为片键,除非你很清楚你这么做的目的,具体原因我不在此分析,根据经验推荐一种较合理的片键方式,“自增字段+查询字段”,没错,片键可以是多个字段的组合。
另外这里说明一点,分片的基本机制:分片总是试图将现有数据均分到所有的分片上。举例说,现在有两个分片,我已经选择了id作为片键,假定插入的id是自增的,如1——10000,则分片后的结果是均分,即1——5000在片A,5000——10000在片B,当然,不一定有这么精确,但却是保证尽量的平均的,以此类推,如果有三块分片,同样均分三等分。
还需要说明的是,一开始插入数据时,数据是只插入到其中一块分片上的,插入完毕后,mongodb内部开始在各片之间进行数据的移动,这个过程可能不是立即的,mongodb足够智能会根据当前负载决定是立即进行移动还是稍后移动。
在插入数据后,立马执行db.users.stats();两次可以验证如上所说。
Ok,简单的分片就是这么搭建的,连接上mongos,然后开始插入数据进行验证吧。
转自 http://blog.csdn.net/weidawei0609/article/details/8235562
相关推荐
搭建MongoDB分片集群并增加ACL是一个涉及到多个步骤的复杂过程,需要对MongoDB的架构、安全模型有深刻理解。通过本文,可以了解到搭建MongoDB 3.6分片集群的基础步骤,并对如何增加安全性有了基本的掌握。当然,在...
通过以上步骤,我们可以成功地搭建一个MongoDB分片集群。分片技术能够极大地提升MongoDB处理大规模数据的能力,并且能够有效地分散负载,提高系统的整体性能。在实际部署过程中,还需要注意监控各个服务的状态,确保...
**一、MongoDB分片群集概述** 分片(Sharding)是MongoDB中的关键特性,旨在通过将数据分散到多个物理节点来处理大规模的数据存储和查询。分片群集由三个主要组件构成: 1. **分片服务器(Shard Server)**:存储...
这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的副本集。副本集是MongoDB中的数据冗余和故障转移机制。它由多个MongoDB实例组成,这些实例维护着相同的数据副本。其中,一个实例...
在企业环境中,为了保证数据的高可用性和容错性,通常会选择搭建MongoDB的集群,如副本集(Replica Set)。本文将详细讲解如何使用Docker来搭建一个包含主节点、副节点和仲裁节点的MongoDB集群。 首先,我们需要...
- **高扩展性**:通过其独特的分片机制,MongoDB可以在现有系统基础上轻松进行水平扩展,使得它非常适合处理大规模数据集。 #### 数据格式 MongoDB采用文档模型,其中文档是以BSON(Binary JSON)形式存储的数据...
#### 三、搭建MongoDB分片集群步骤详解 1. **启动分片服务器**: - 模拟两个分片(shard),每个分片只有一台mongod服务器。 - ```shell [root@localhost mongodb]# ./bin/mongod --dbpath /opt/mongodb/data_...
2. **Sharding(分片)**:用于实现水平扩展,将大数据集分布在多个MongoDB实例(称为“分片”)上。 3. **Config Server(配置服务器)**:维护分片集群的元数据信息。 4. **Route(路由器)**:负责将客户端的请求...
本压缩包 "mong分片配置.zip" 内包含的是配置文件,可能用于搭建 MongoDB 分片集群。 首先,我们来理解一下 MongoDB 的分片概念。分片是将数据集分割成多个片段(Chunks),每个片段存储在不同的物理节点(称为分片...
总结,本文档提供了在Windows环境下搭建MongoDB伪分布式集群的步骤,包括分片集和路由节点的配置,以及在`mongos`中添加和管理分片。这样的集群架构能够有效地提高数据的读写性能和系统的容错性,适合大数据应用场景...
- **分片键(Shard Key)**:用于决定文档存储位置的字段。 #### MongoDB集群搭建步骤 1. **安装MongoDB** - 在所有服务器上安装MongoDB软件。 - 配置必要的环境变量。 2. **配置副本集** - 在每台服务器上...
在本文中,我们将探讨如何搭建MongoDB的副本集集群,这是一种确保数据高可用性和容错性的方法。 首先,我们需要从MongoDB的官方网站下载对应操作系统的安装包。在示例中,使用的版本是3.6.3,适用于RHEL7.0系统。...
3. 分片和复制:为了提高可扩展性和高可用性,MongoDB支持分片(Sharding)和复制(Replication)。分片将数据分布在多个节点上,复制则创建数据副本,提高数据安全性。 4. 查询语言:MongoDB的查询语言(MQL)支持...
4. **分片**:随着数据量和处理需求的增长,MongoDB可以分布式部署在多台计算机上,实现数据分片。 5. **丰富的查询表达式**:使用JSON形式的查询指令,能处理嵌套对象和数组。 6. **更新操作**:`update()`命令可以...
mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,适用于不同的场合,属Replica set应用最为广泛,主从模式现在用的较少,sharding模式最为完备,但配置维护较为复杂 ...
- **自动分片以支持云级别的伸缩性**:自动分片功能支持水平数据库集群,能动态添加额外的机器。 #### 二、适用场景 MongoDB适用于以下几种场景: - **网站数据**:实时插入、更新与查询,具备网站实时数据存储所...
你现在已经具备了运行、管理MongoDB数据库的基础知识,可以进一步探索复制集、分片、索引、聚合等功能,以满足更复杂的应用场景。同时,作为运维人员,了解数据库性能监控、备份恢复以及安全性策略也是必不可少的...
- 选择合适的分片键,均匀分布数据。 - 定期维护数据库,如重建索引、清理无用数据等。 - **安全性**: - 设置访问控制:配置用户名密码认证机制。 - 加密传输:启用SSL/TLS加密通信。 - 数据备份:定期备份...