MongoDB 分片模式
Sharding (分片模式)
副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了。副本集中的一台机器可能不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 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 的集群架构是分布式的,如下图所示,集群会结合副本集和分片机制保证生产过程的高可靠性和高可扩展性。

从上图的集群中可以看到,整个生产集群与分片集群的架构类似,由三个重要组件组成,包括 Shard Server、Config Server 和 Route Server。不同之处在于每个组件可以使用多个实例来保证集群的可靠性。
MongoDB 分片模式的更多相关文章
- MongoDB Java API操作很全的整理
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...
- kubernetes生产实践之mongodb
简介 先看下生命周期图 kubedb支持的mongodb版本 [root@qd01-stop-k8s-master001 mysql]# kubectl get mongodbversions NAM ...
- 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)
简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...
- mongoDB系列之(三):mongoDB 分片
1. monogDB的分片(Sharding) 分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式. mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上 ...
- Mongodb 集群加keyFile认证
介绍 自从远古计绳结开始,数据库的存储就注定了今天的地位和多样性,Nosql的出现更是解决了现有的关系型数据库无法解决的一些难题,对高性能,灵活度,扩展性,海量数据的问题.随之而出现的高速内存索引数据 ...
- 百万级高并发mongodb集群性能数十倍提升优化实践
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...
- 012.MongoDB读写分离
一 读写分离概述 1.1 读写分离描述 从应用程序角度来看,使用Replica Set 和使用单台mongo很像.默认的驱动程序会连接primary节点,并且将所有读写请求都路由到主节点.但也可以通过 ...
- Mongodb 分片原理
1.主从mongodb 模式 类似,MySQL的主从配置 参照:https://blog.csdn.net/liusong0605/article/details/11551699 mongoDB有 ...
- MongoDB入门(介绍、安装、增删改查)
文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
随机推荐
- Javascript中求Date类型的差值、增加/减少秒/分钟/小时/天等
最近需要对时间进行加减操作,以往需要取出具体时间后再加减,还需考虑进位问题很是麻烦 转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/date-operator ...
- blog2对PTA4,5,6集的习题总结
一. 前言 通过本三次PTA得题目,我受益匪浅.题量的话不算太多,但是题目难度有些大.在本次PTA第六次题目集中,题目难度较中,第四次题目集第一道水文数据处理与第五次题目集的查询关键字出现次 ...
- pytest学习总结
官方pytest文档:Full pytest documentation - pytest documentation 一.pytest以及辅助插件的安装 1.pytest安装 pip install ...
- 【文献阅读】An efficient motion planning based on grid map: Predicted Trajectory Approach with global path guiding
(1)主要工作内容 本文提出了一种基于轨迹预测法的欠驱动无人艇的全局运动规划算法.该方法考虑了无人艇的所有动力学约束,并且能找到一条根据船舶自身操纵系统进行跟踪的全局轨迹. 根据USV数学模型生成的预 ...
- source insight c++ namespace 无法跳转解决方法
source insight c++ namespace 无法跳转解决方法 2016年02月15日 11:47:35 暗小夜 阅读数:4460 勾选igore namespace declarat ...
- linux运维之道学习笔记
linux常用命令 1.find命令 find / "*.log" 查找/目录下.log结尾的档案 find / -mtime -3 查找/目录下三天内被修改的档案 find / ...
- tomcat反向代理,监控,性能优化详细步骤
第1章 tomcat简介Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同 ...
- 真实世界的算法_pdf
链接:https://pan.baidu.com/s/1OZiDnd2My3FvGIuwO91E7Q 提取码:t88i
- P标签内容过长以省略号代替
p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
- go 更新依赖库到最新版本
go 怎么更新依赖库到最新版本 遇到这么一个问题:我自己的一个程序依赖自己写的一个库,然后修改了库,程序这边想要更新库,却怎么也更新不上 删除mod.sum文件里相关库的信息 使用find / -na ...