MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。
Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。
Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,通常将 Replica Set 和 Sharding 两种技术结合使用。

主从复制

主从复制是 MongoDB 中最简单的数据库同步备份的集群技术,其基本的设置方式是建立一个主节点(Primary)和一个或多个从节点(Secondary),如下图所示。


这种方式比单节点的可用性好很多,可用于备份、故障恢复、读扩展等。集群中的主从节点均运行 MongoDB 实例,完成数据的存储、查询与修改操作。

主从复制模式的集群中只能有一个主节点,主节点提供所有的增、删、查、改服务,从节点不提供任何服务,但是可以通过设置使从节点提供查询服务,这样可以减少主节点的压力。

另外,每个从节点要知道主节点的地址,主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

在主从复制的集群中,当主节点出现故障时,只能人工介入,指定新的主节点,从节点不会自动升级为主节点。同时,在这段时间内,该集群架构只能处于只读状态。

副本集
副本集的集群架构如下图所示。


此集群拥有一个主节点和多个从节点,这一点与主从复制模式类似,且主从节点所负责的工作也类似,但是副本集与主从复制的区别在于:当集群中主节点发生故障时,副本集可以自动投票,选举出新的主节点,并引导其余的从节点连接新的主节点,而且这个过程对应用是透明的。

可以说,MongoDB 的副本集是自带故障转移功能的主从复制。

MongoDB 副本集使用的是 N 个 mongod 节点构建的具备自动容错功能、自动恢复功能的高可用方案。在副本集中,任何节点都可作为主节点,但为了维持数据一致性,只能有一个主节点。

主节点负责数据的写入和更新,并在更新数据的同时,将操作信息写入名为 oplog 的日志文件当中。主节点还负责指定其他节点为从节点,并设置从节点数据的可读性,从而让从节点来分担集群读取数据的压力。

另外,从节点会定时轮询读取 oplog 日志,根据日志内容同步更新自身的数据,保持与主节点一致。

在一些场景中,用户还可以使用副本集来扩展读性能,客户端有能力发送读写操作给不同的服务器,也可以在不同的数据中心获取不同的副本来扩展分布式应用的能力。

在副本集中还有一个额外的仲裁节点(不需要使用专用的硬件设备),负责在主节点发生故障时,参与选举新节点作为主节点。

副本集中的各节点会通过心跳信息来检测各自的健康状况,当主节点出现故障时,多个从节点会触发一次新的选举操作,并选举其中一个作为新的主节点。为了保证选举票数不同,副本集的节点数保持为奇数。

分片
副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了。副本集中的一台机器可能不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 MongoDB 的分片(Sharding)技术,这也是 MongoDB 的另外一种集群部署模式。

分片是指将数据拆分并分散存放在不同机器上的过程。有时也用分区来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载。

MongoDB 支持自动分片,可以使数据库架构对应用程序不可见,简化系统管理。对应用程序而言,就如同始终在使用一个单机的 MongoDB 服务器一样。

MongoDB 的分片机制允许创建一个包含许多台机器的集群,将数据子集分散在集群中,每个分片维护着一个数据集合的子集。与副本集相比,使用集群架构可以使应用程序具有更强大的数据处理能力。

MongoDB 分片的集群模式如下图所示。

构建一个 MongoDB 的分片集群,需要三个重要的组件,分别是分片服务器(Shard Server)、配置服务器(Config Server)和路由服务器(Route Server)。
Shard Server
每个 Shard Server 都是一个 mongod 数据库实例,用于存储实际的数据块。整个数据库集合分成多个块存储在不同的 Shard Server 中。

在实际生产中,一个 Shard Server 可由几台机器组成一个副本集来承担,防止因主节点单点故障导致整个系统崩溃。
Config Server
这是独立的一个 mongod 进程,保存集群和分片的元数据,在集群启动最开始时建立,保存各个分片包含数据的信息。
Route Server
这是独立的一个 mongos 进程,Route Server 在集群中可作为路由使用,客户端由此接入,让整个集群看起来像是一个单一的数据库,提供客户端应用程序和分片集群之间的接口。

Route Server 本身不保存数据,启动时从 Config Server 加载集群信息到缓存中,并将客户端的请求路由给每个 Shard Server,在各 Shard Server 返回结果后进行聚合并返回客户端。

以上介绍了 MongoDB 的三种集群模式,副本集已经替代了主从复制,通过备份保证集群的可靠性,分片机制为集群提供了可扩展性,以满足海量数据的存储和分析的需求。

MongoDB分布式集群架构(3种模式)相关推荐

  1. NOSQL,MongoDB分布式集群架构

    MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...

  2. MongoDB分布式集群(一)

    MongoDB分布式集群 集群方式有三种:Master-Slaver(主从).Replica Set(副本集).Sharding(分片)三种方式. 关于MongoDB集群: 三种模式各有优劣,适用于不 ...

  3. RabbitMQ分布式集群架构

    RabbitMQ分布式集群架构和高可用性(HA) (一) 功能和原理 设计集群的目的 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行 通过增加更多的节点来扩展消息通信的吞吐量 1 集群配 ...

  4. mongodb分布式集群搭建手记

    一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...

  5. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

  6. 分布式集群架构解决方案

    分布式集群架构与解决方案 一致性Hash算法 基本算法回顾 顺序查找法 需求:给定一个无序的数组A,然后随便给出一个数值N,判断N是否存在所给定的数组A中. 解决思路:从索引0开始遍历数组A,依次和判 ...

  7. redis集群的几种模式

    redis集群的几种模式 主从模式 哨兵模式 Cluster集群模式(推荐) 三种模式都有搭建成功,相比之下,个人还是推荐Cluster集群 主从模式 主从模式(Master-Slave Replic ...

  8. Redis 分布式集群的几种方案及问题

    1.Redis 分布式集群的几种方案 1.1.主从复制 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命 ...

  9. 分布式集群架构场景化解决方案相关

    文章目录 前言 一.一致性Hash算法 1.1 Hash算法应用场景 1.2 普通Hash算法存在的问题 1.3 一致性Hash算法 二.集群时钟同步问题 2.1 时钟不同步导致的问题 2.2 集群时 ...

最新文章

  1. NtQueryInformationProcess用法
  2. Visual Studio 2010/2013 UTF8编码调试时显示中文
  3. 8.非关系型数据库(Nosql)之mongodb的应用场景(关系型数据库 和 Mongodb进行CRUD时数据用时的比较)
  4. python staticmethod规范_Python Staticmethod可以调用另一个本地方法吗?
  5. 【Codeforces 977F】Consecutive Subsequence
  6. 文件同步工具Unison
  7. Android Q+ 新特性 Settings Panel
  8. adams参数化优化设计例子
  9. 谷歌浏览器插件自动点击程序
  10. 未来IT互联网企业的发展前景
  11. 在星巴克聊聊“一找小七”
  12. Entry name ‘res/drawable-xhdpi-v4/ic_launcher.png‘ collided
  13. 鲁大师便捷查看硬盘参数
  14. Springcloudalibaba整合es!实现相关性排序,集成完代码真香
  15. (Verilog)多周期CPU设计
  16. WaterMark 1.0
  17. Oracle分区表操作
  18. 谈iphone电话短信增强工具kuaidail软件的实现
  19. 如何输入带空格的字符串
  20. 了解茶叶读这一篇就够了:茶叶分类及十大名茶

热门文章

  1. 聚合数据短信验证码接口实现 Android开发短信验证码
  2. 机器视觉-简单入门小例子
  3. 05 centos实战之解决端口无法访问
  4. 单目自监督稠密景深估计
  5. 索尼X90J和X95J区别 索尼X90J和X95J哪个好?
  6. 球半足球比分,瑞典超:哈马比 VS 哥德堡 7月12日
  7. rgb sw 线主板接口在哪_不止是RGB,实用性更佳:BitFenix火鸟 黎明至尊 ARGB机箱 上机体验...
  8. STDIN_FILENO/STDOUT_FILENO与 stdin/stdout 的区别
  9. 115家IT公司待遇一览表
  10. QGI缓冲区渐变色符号制作