一、分片

MongoDB使用分片技术来支持大数据集和高吞吐量操作。

1、分片目的

对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战。频繁的CRUD操作能够耗尽服务器的CPU资源,快速的数据增长也会让硬盘存储无能为力,最终内存无法满足数据需要导致大量的I/O,主机负载严重。为了解决这种问题,mongodb系统主要采用分片技术。

2、MongoDB中的分片集群

分片:一种数据库体系结构,按键范围对数据进行分区,并在两个或多个数据库实例之间分配数据。分片可实现水平缩放。

     分片群集:节点集合包括一个分片的MongoDB部署。分片群集由配置服务器,分片和一个或多个mongos 路由进程组成。

MongoDB通过配置分片集群来支持分片,一个分片集群包括以下几个组件:分片,查询路由,配置服务器

  • 分片:用来存储数据,一个生产环境的分片集群,通常每个分片是一个副本集。
  • 前端路由:指客户端应用访问每个分片的端口。
  • 配置服务器:配置服务器存储群集的元数据和配置设置。从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。

3、数据划分

MongoDB的数据划分,是以集合级别为标准。分片通过shard key来划分集合数据。

  • shard key:为了对集合分片,你需要指定一个shard key。shard key既可以是集合的每个文档的索引字段也可以是集合中每个文档都有的组合索引字段。MongoDB将shard keys值按照块(chunks)划分,并且均匀的将这些chunks分配到各个分片上。MongoDB主要使用基于范围划分基于散列划分来划分chunks的。
  • 基于范围划分:MongoDB通过shard key值将数据集划分到不同的范围就称为基于范围划分。对于数值型的shard key:你可以虚构一条从负无穷到正无穷的直线(理解为x轴),每个shard key 值都落在这条直线的某个点上,然后MongoDB把这条线划分为许多更小的没有重复的范围成为块(chunks),一个chunk就是就某些最小值到最大值的范围。
  • 基于散列划分:MongoDB计算每个字段的hash值,然后用这些hash值建立chunks。

二、分片集群的实现

分片结构端口如下:

  1. 按照实践4的步骤创建shard1、shard2两个分片,并在配置文件mongodb.cfg中加入

    1. sharding:
    2. clusterRole: shardsvr
  1. 创建配置服务器副本集(按照实践4

  • 配置三个configure服务器实例,并且启动。和实践4不同的是mongod.cfg中
  1. sharding:
  2. clusterRole: configsvr

  

其中端口27022的服务器配置具体mongod.cfg如下:

  1. # mongod.conf
  2.  
  3. # for documentation of all options, see:
  4. # http://docs.mongodb.org/manual/reference/configuration-options/
  5.  
  6. # Where and how to store data.
  7. storage:
  8. dbPath: C:\cluster\configure\db
  9. journal:
  10. enabled: true
  11. # engine:
  12. # mmapv1:
  13. # wiredTiger:
  14.  
  15. # where to write logging data.
  16. systemLog:
  17. destination: file
  18. logAppend: true
  19. path: C:\cluster\configure\log\mongod.log
  20.  
  21. # network interfaces
  22. net:
  23. port:
  24. bindIp: 0.0.0.0
  25.  
  26. #processManagement:
  27.  
  28. #security:
  29.  
  30. #operationProfiling:#
  31.  
  32. replication:
  33. replSetName: config
  34. sharding:
  35. clusterRole: configsvr
  36.  
  37. ## Enterprise-Only Options:
  38.  
  39. #auditLog:
  40.  
  41. #snmp:
  • 配置服务器副本集
  1. cfg = { _id:"config", members:[
                         {_id:0,host:"192.168.111.131:27022"},
                         {_id:1,host:"192.168.111.135:27022"},
                         {_id:2,host:"192.168.111.138:27022"}
                    ]
             }
    rs.initiate(cfg)

3. 分别配置路由服务器实例,并且启动。

  1. # mongod.conf
  2.  
  3. # for documentation of all options, see:
  4. # http://docs.mongodb.org/manual/reference/configuration-options/
  5.  
  6. # where to write logging data.
  7. systemLog:
  8. destination: file
  9. logAppend: true
  10. path: C:\cluster\mongos\log\mongod.log
  11.  
  12. # network interfaces
  13. net:
  14. port:
  15. bindIp: 0.0.0.0
  16.  
  17. #processManagement:
  18.  
  19. #security:
  20.  
  21. #operationProfiling:#
  22.  
  23. #replication:
  24. sharding:
  25. configDB:
  26. config/192.168.111.131:,192.168.111.135:,192.168.111.138:
  27.  
  28. ## Enterprise-Only Options:
  29.  
  30. #auditLog:
  31.  
  32. #snmp:

注意:加粗部分为上一步配置好的configure服务器。

4.使用mongos启动路由服务器实例,连接端口

5.使用如下指令添加复制集shard1和shard2的主副节点作为分片添加到集群中。

  1. sh.addShard("shard1/192.168.111.131:27020,192.168.111.135:27020,192.168.111.138:27020")
  2. sh.addShard("shard2/192.168.111.131:27021,192.168.111.135:27021,192.168.111.138:27021")

注意:添加的ip或主机名要明确是rs.status()上的name

6.使用命令sh.status()检查配置正确与否。

MongoDB DBA 实践6-----MongoDB的分片集群部署的更多相关文章

  1. MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署

    在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...

  2. mongoDB研究笔记:分片集群部署

    前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...

  3. MongoDB在windows平台分片集群部署

    本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...

  4. MongoDB部署实战(一)MongoDB在windows平台分片集群部署

    前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多类型,错误的,操作的,...用MongoDB存储日志,大量的日志产生,大量读写吞吐量很大的时候,单个Server很 ...

  5. MongoDB分片集群部署方案

    前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...

  6. mongo分片集群部署

    测试环境192.168.56.101-213 前期准备: openssl rand -base64 756 > /home/software/mongodb/mongodbkey chmod   ...

  7. 【mongoDB运维篇④】Shard 分片集群

    简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...

  8. monodb分片集群部署

    本文档基于MongoDB版本3.6.2 下载地址: 建议使用最新版本 https://www.mongodb.com/download-center#community 安装文件 集群ip及端口设计方 ...

  9. 【八】MongoDB管理之分片集群实践

    MongoDB中集群有三种:主从复制.副本集.分片集群.目前副本集已经替代主从复制架构,成为官方建议采用的架构,而分片集群相较于前两种,更加复杂. 下面是生产环境中常用的分片集群架构: 我们知道,分片 ...

随机推荐

  1. ubuntu16下面安装vmware tools后仍然未全屏问题

    1.默认下载ubuntu16的iso镜像后,自带的有vmtools.解压 tar -xzvf  VMwareTools-10.0.6-3595377.tar.gz 进入解压目录. 执行:sudo ./ ...

  2. C#使用yield关键字构建迭代器

    http://www.cnblogs.com/Huaran1chendu/p/4838536.html 以前,如果我们希望构建支持foreach枚举的自定义集合,只能实现IEnumerable接口(可 ...

  3. 如何写一个能在gulp build pipe中任意更改src内容的函数

    gulp在前端自动化构建中非常好用,有非常丰富的可以直接拿来使用的plugin,完成我们日常构建工作. 但是万事没有十全十美能够完全满足自己的需求,这时我们就要自己动手写一个小的函数,用于在gulp ...

  4. 将一种cell当做几种cell使用

    将一种cell当做几种cell使用 将一种cell当做几种cell用是有着一些意义的,比如,有时候,不同的cell之间差异很小,如果再派生一个cell出来,就会显得很麻烦,这时候,将这个cell当做几 ...

  5. Druid学习---配置_DruidDataSource参考配置

    [更多参考]https://www.cnblogs.com/niejunlei/p/5977895.html 配置_DruidDataSource参考配置 以下是一个参考的连接池配置: <bea ...

  6. apt 安装 Oracle Java JDK

    apt 安装 Oracle Java JDK 8/10 "Linux Uprising"团队维护一个PPA存储库,其中包含适用于所有当前Ubuntu版本的Oracle Java 1 ...

  7. Tomcat的HTTPS配置及HTTP自动跳转配置

    1.生成证书 (1)在jdk的安装目录\bin\keytool.exe下打开keytool.exe 在命令行中输入以下命令: keytool -genkeypair -alias 以上命令将生产一对非 ...

  8. JavaScript浏览器检测之navigator 对象

    一.使用客户端检测的原因 由于每个浏览器都具有自己独到的扩展,所以在开发阶段来判断浏览器是一个非常重要的步骤. 虽然浏览器开发商在公共接口方面投入了很多精力,努力的去支持最常用的公共功能: 但在现实中 ...

  9. (九)Linux查看用户登录的命令

    用户登录查看命令 w 含义:就这么简单,一个字母w就是一个命令.查看登录用户信息. 输出的结果的含义: USER       登录的用户名 TTY        登录终端 FROM      从哪个I ...

  10. BeautifulSoup使用注意事项

    BeautifulSoup使用注意事项 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...