`
gong1208
  • 浏览: 559054 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何搭建mongodb分片

阅读更多

 

搭建mongodb分片

 

Sharding分片概念

这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。

MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。

要构建一个 MongoDB Sharding Cluster,需要三种角色:

Shard Server

即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。为了实现每个Shard内部的auto-failoverMongoDB官方建议每个Shard为一组Replica Set。关于如何安装及搭建replica set请参考我的另一篇文章 http://gong1208.iteye.com/blog/1558355

 

Config Server

为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key,例如{age: 1} shard key可以决定该条记录属于哪个chunkConfig Servers就是用来存储:所有shard节点的配置信息、每个chunkshard key范围、chunk在各shard的分布情况、该集群中所有DBcollectionsharding配置信息。

 

Route Process

这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。

下面我们在同一台物理机器上构建一个简单的 Sharding Cluster

架构图如下:

 

 

 

  •       Shard Server 127017
  •       Shard Server 227018
  •       Config Server 27027
  •       Route Process40000

 

 

实施步骤

步骤一:

启动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服务一样启动,不需要添加—shardsvrconfigsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以)

 

步骤三:

启动Route Process

/Opt/mongodb/bin/mongos --port 40000 --configdb localhost:27027 --fork --logpath

/opt/mongodb/data/shard/log/route.log --chunkSize 1 --启动Route Server实例

 

mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB,为了方便测试Sharding效果,我们把chunkSize指定为 1MB。意思是当这个分片中插入的数据大于1M时开始进行数据转移

 

步骤四:

 配置Sharding

接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点

[root@localhost ~]# /Opt/mongo/bin/mongo admin --port 40000 --此操作需要连接admin

MongoDB shell version: 2.0.1

connecting to: 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在片A5000——10000在片B,当然,不一定有这么精确,但却是保证尽量的平均的,以此类推,如果有三块分片,同样均分三等分。

         还需要说明的是,一开始插入数据时,数据是只插入到其中一块分片上的,插入完毕后,mongodb内部开始在各片之间进行数据的移动,这个过程可能不是立即的,mongodb足够智能会根据当前负载决定是立即进行移动还是稍后移动。

在插入数据后,立马执行db.users.stats();两次可以验证如上所说。

 

Ok,简单的分片就是这么搭建的,连接上mongos,然后开始插入数据进行验证吧。 

 

 

  • 大小: 23.6 KB
3
3
分享到:
评论
2 楼 marcolee 2013-04-09  
新项目也打算用mongodb了,楼主写的不错。。
1 楼 steafler 2012-08-06  
不错,回家研究研究

相关推荐

    Docker 搭建 MongoDB 分片集群的docker-compose.yaml文件

    Docker 搭建 MongoDB 分片集群的docker-compose.yaml文件. 直接可以用docker-compose up -d运行

    mongodb分片集群增加acl

    搭建MongoDB分片集群并增加ACL是一个涉及到多个步骤的复杂过程,需要对MongoDB的架构、安全模型有深刻理解。通过本文,可以了解到搭建MongoDB 3.6分片集群的基础步骤,并对如何增加安全性有了基本的掌握。当然,在...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    Mongodb分片副本集集群搭建

    总结以上知识点,搭建MongoDB分片副本集集群需要考虑架构设计、版本兼容性、配置服务器和分片服务器的设置、机器规划以及配置参数等方面。了解这些知识点并结合实际操作,可以有效避免搭建过程中遇到的常见问题,...

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...

    实验五 MongoDB分片部署与启动

    ### 实验五 MongoDB分片部署与启动 #### 实验综述 本次实验旨在深入学习MongoDB的分片机制,理解并掌握如何部署一个基于多服务器的MongoDB分片集群。分片是MongoDB的一项重要特性,它允许将数据分散存储在多个物理...

    centos7下mongodb4.0.6分片集群搭建(psa)-用户认证关键问题汇总

    公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...

    colony(自己做的MongoDb分片式集群搭建配置).rar

    搭建MongoDB分片式集群通常包括以下几个步骤: 1. **设置配置服务器**:配置服务器负责存储集群元数据,如分片信息、副本集状态等。在本示例中,可能有一个名为`config`的配置服务器实例。 2. **启动 mongod 实例*...

    centos7下mongodb4.0.6分片集群搭建-单体升级成绩群方案.pdf

    在搭建 MongoDB 分片集群时,首先你需要了解以下几个核心概念: 1. **复制集(Replica Set)**:提供数据冗余和故障转移,确保高可用性。每个复制集由多个成员组成,其中一个是主节点,其他是副节点。数据变更首先...

    基于SpringBoot和MongoDB的拉勾网简历快照分片集群设计源码

    项目旨在为拉勾网用户提供简历快照服务,通过搭建MongoDB分片集群模拟简历快照数据操作,实现以下功能:构建包含仲裁节点的分片集群、使用权限控制建立数据库lg_resume,并赋予lagou_gx账号读写权限、利用SpringBoot...

    MongoDB企业级分片集群搭建视频.zip

    目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4

    MongoDB分布式搭建执行文件(直接可运行)搭建MongoDB分布式集群

    (3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由节点服务器(Mongos) - 添加分片集到集群 - 创建数据库...

    k8s搭建mongo分片集群

    本文将详细介绍如何在 k8s 中搭建 MongoDB 分片集群。 **一、MongoDB 分片集群介绍** MongoDB 分片集群是一种水平扩展的解决方案,它通过将数据分布在多个物理节点上,实现数据的分片存储,从而提高读写性能和存储...

    MongoDB分片集群搭建教程:副本集创建与数据分片

    内容概要:本文提供了详细的MongoDB分片集群的搭建指导,涵盖了从环境准备、配置文件编写、副本集的建立、主节点的选择、配置服务器和数据分片服务器的配置到最后的路由节点的搭建与操作整个流程,以及对数据库的...

    MongoDB分片详细教程

    通过以上步骤,我们可以成功地搭建一个MongoDB分片集群。分片技术能够极大地提升MongoDB处理大规模数据的能力,并且能够有效地分散负载,提高系统的整体性能。在实际部署过程中,还需要注意监控各个服务的状态,确保...

    mongo分片集群搭建

    MongoDB 分片集群搭建 MongoDB 分片集群是一种用于处理大量数据并提高系统扩展性的解决方案。它通过将数据分散在多个服务器(称为“shards”)上来分散负载,每个shard可以是一个副本集,确保数据的高可用性。在分...

    mongdb分片教程

    #### 三、搭建MongoDB分片集群步骤详解 1. **启动分片服务器**: - 模拟两个分片(shard),每个分片只有一台mongod服务器。 - ```shell [root@localhost mongodb]# ./bin/mongod --dbpath /opt/mongodb/data_...

    MongoDB分片集群部署详解

    1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明 2、各个角色的部署情况 角色 IP 端口 ...

Global site tag (gtag.js) - Google Analytics