数据压力大到机器支撑不了的时候能否做到自动扩展?

在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的。而MongoDB主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题。

传统数据库怎么做海量数据读写?其实一句话概括:分而治之。上图看看就清楚了,如下 taobao岳旭强在infoq中提到的 架构图:

上图中有个TDDL,是taobao的一个数据访问层组件,他主要的作用是SQL解析、路由处理。根据应用的请求的功能解析当前访问的sql判断是在哪个业务数据库、哪个表访问查询并返回数据结果。具体如图:

说了这么多传统数据库的架构,那Nosql怎么去做到了这些呢?MySQL要做到自动扩展需要加一个数据访问层用程序去扩展,数据库的增加、删除、备份还需要程序去控制。一但数据库的节点一多,要维护起来也是非常头疼的。不过mongodb所有的这一切通过他自己的内部机制就可以搞定!还是上图看看mongodb通过哪些机制实现路由、分片:

从图中可以看到有四个组件:mongos、config server、shard、replica set。

mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server:顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

shard:这就是传说中的分片了。上面提到一个机器就算能力再大也有天花板,就像军队打仗一样,一个人再厉害喝血瓶也拼不过对方的一个师。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做,如下图:

一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。也许有人问一台机器硬盘加大一点不就可以了,为什么要分给四台机器呢?不要光想到存储空间,实际运行的数据库还有硬盘的读写、网络的IO、CPU和内存的瓶颈。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况,这样还不如不分片!

replica set:前面已经详细讲过了这个东东,怎么这里又来凑热闹!其实上图4个分片如果没有 replica set 是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建 replica set 副本集保证分片的可靠性。生产环境通常是 2个副本 + 1个仲裁。

说了这么多,还是来实战一下如何搭建高可用的mongodb集群:

首先确定各个组件的数量,mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里测试资源有限,只准备了 3台机器,在同一台机器只要端口不同就可以,看一下物理部署图:

转载于:https://www.cnblogs.com/byfboke/p/9101696.html

MongoDB的角色作用(2)相关推荐

  1. 2021-05-11 MongoDB面试题 分析器在MongoDB中的作用是什么

    分析器在MongoDB中的作用是什么? MongoDB中包括了一个可以显示数据库中每个操作性能特点的数据库分析器.通过这个分析器你可以找到比预期慢的查询(或写操作);利用这一信息,比如,可以确定是否需 ...

  2. Mongodb 之 $elemMatch 作用

    Mongodb 之 $elemMatch 作用 Mongodb 在当内嵌文档中数据过多时 $elemMatch 进行精确查询. 1. 创建文档添加测试数据 db.test.insert({" ...

  3. 【Docker架构架构角色概念角色作用】

    一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] 二.Docker架构 D ...

  4. MongoDB 安全控制角色说明

    官方文档地址 MongoDB內建角色官方文档说明 注意点 本文基于MongoDB 3.4版本 写这篇文档的目的 这篇文章仅合适像自己一样的MongoDB新手,自己在查阅此部分资料时发现网上大部分资料要 ...

  5. MongoDB 用户角色管理

    文章目录 1 用户管理简介 2 内置角色 3 创建用户 3.1 创建管理员用户 3.2 创建普通用户 3.3 创建 root 用户 3.4 创建带有自定义信息的用户 4 查看用户信息 5 更新用户角色 ...

  6. Linux权限、角色作用

    转载于:https://www.cnblogs.com/socketqiang/p/10959437.html

  7. mongodb创建local库用户_mongodb用户与角色使用

    此文档以mongodb 4.0版本进行对用户权限和角色讲解,更详细内容可参考mongodb官方文档. 官方文档:https://docs.mongodb.com/manual/core/securit ...

  8. (更新时间)2021年5月11日 MongoDB数据库 MongoDB面试题

    MongoDB高频面试题 文章目录 MongoDB高频面试题 1.MongoDB是什么? 2.MongoDB有哪些特点? 3.MySQL与MongoDB之间最基本的差别是什么? 4.monogodb中 ...

  9. 《MongoDB大数据处理权威指南》读书笔记

    我们总是喜欢拿"顺其自然" 来敷衍人生道路上的荆棘坎坷, 却很少承认,真正的顺其自然, 其实是竭尽所能之后的不强求,而非两手一摊的不作为. --知乎   2020.08.1  mo ...

  10. MongoDB创建用户用户权限

    创建用户 启动mongo 切换到admin库 创建admin - 可以对所有数据库进行管理 > db.createUser({user: "admin", pwd:" ...

最新文章

  1. hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
  2. Java记录-SpringMVC整合Echarts画地图加散点图
  3. .NET工资低?那肯定是你打开的方式不正确
  4. q7goodies事例_Java 8 Friday Goodies:SQL ResultSet流
  5. poxtfix+dovecot+saslauthd+courier-authlib +mysql + extmail 完整虚拟邮箱系统部署
  6. 转 IDEA 解决代码提示功能消失
  7. js实现shallowReactive和reactive
  8. [转载] Python3中的表达式运算符
  9. XShell 将Linux文件上传、下载到Windows下(rz上传、sz下载)
  10. matlab共享变量,matlab如何编写共享参数拟合程序 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  11. 升级Spring Boot内嵌Tomcat版本
  12. AllenNLP框架学习笔记(数据篇之二)
  13. arcgis api 3.X 实现加载百度矢量地图和百度影像地图
  14. 【Java框架】CSFramework框架的应用——简易聊天室
  15. Windows 10微软应用商店打不开问题解决方案
  16. 小米平板1刷LineageOS16
  17. 写好一份数据分析报告需要注意的13个要点
  18. python比较运算符中大于等于且小于等于的表达方式
  19. 区块链倪老师:区块链思维——序章
  20. Python编程实例-PyQt5 GUI编程-Widgets-QCheckBox

热门文章

  1. 月薪3W+,人才缺口高达19W,行业大牛5天带你零基础入门数据分析!
  2. 十问:BAT技术大牛的核心学习方法
  3. 微信号php756,微信机器人开发者常说的“提62”是什么?微信62数据是什么意思?...
  4. 《算法竞赛入门经典》习题及反思 -2
  5. .NET:默认是按值传递的
  6. Struts,Spring,Hibernate三大框架的面试
  7. Portlet开发指南第三章
  8. 关键字值集合和IDictionary
  9. 主要厂商在大数据领域的布局状况
  10. Docker结合Consul实现的服务发现(一)