MongoDB 的高可用与水平扩展 —— 复制集群 vs 分片集群

全面解读MongoDB高可用、高性能与高可扩展架构 MongoDB 作为一款广受欢迎的现代文档数据库,其高可用性(High Availability, HA)、高性能(High Performance)和高可扩展性(High Scalability)是其核心特性,使得它在各种大规模数据处理场景中表现出色。下面来分别介绍下"三高",高可用、高性能、高可扩展的原理。 阅读详情

MongoDB 的高可用与水平扩展 —— 复制集群 vs 分片集群

一、前置知识:数据库集群的两种基本形式

在学习 MongoDB 的集群机制之前,我们需要了解两个核心概念:

类型名称目标实现方式
高可用性复制集群数据冗余 + 故障自动恢复副本集(Replica Set)
水平扩展能力分片集群数据拆分 + 负载均衡分片(Shard) + Mongos + Config Server

🔁 1. 复制集群(Replication)

  • 又叫“副本集”(Replica Set)

  • 多个节点存储相同的数据

  • 一个主节点(Primary),多个从节点(Secondary)

  • 写操作只发生在主节点,从节点同步数据

  • 如果主节点宕机,会自动选举新主节点

✅ 作用:实现高可用(HA)、故障自动切换

📦 2. 分片集群(Sharding)

  • 将数据按照一定规则分散到多个节点上

  • 每个节点只存一部分数据

  • 所有节点加起来才是完整数据集

✅ 作用:实现水平扩展(Scale Out),支持海量数据和高并发


二、MongoDB 是如何同时实现高可用和水平扩展的?

MongoDB 的强大之处在于它把上面两种集群模式结合起来使用:

分片集群 + 每个分片是复制集群

🎯 示例:2TB 数据的分布

假设我们有一个 2TB 的集合 chat_messages,要部署一个既高可用又能水平扩展的 MongoDB 集群。

✅ 步骤一:创建两个分片(Shard)

  • Shard A:负责存储 _id 哈希范围为 0~50% 的数据(约 1TB)

  • Shard B:负责存储 _id 哈希范围为 50~100% 的数据(约 1TB)

👉 这样我们就实现了水平扩展!

✅ 步骤二:每个分片都是一个副本集(3节点)

  • Shard A:

    • Node A1(主)

    • Node A2(从)

    • Node A3(仲裁/从)

  • Shard B:

    • Node B1(主)

    • Node B2(从)

    • Node B3(仲裁/从)

👉 这样我们就实现了高可用!

✅ 架构图示意:

分片节点数存储内容高可用性
Shard ANode A1, A2, A3数据 A(1TB)是(副本集)
Shard BNode B1, B2, B3数据 B(1TB)是(副本集)

三、MongoDB 集群组件补充说明

为了完整地构建一个分片集群,还需要以下组件:

组件作用特点说明
Mongos查询路由器客户端连接入口,负责将请求路由到正确的分片
Config Server元数据服务器存储集群元信息(如数据分布、配置等),通常也是副本集

四、MySQL 如何实现类似功能?

✅ 高可用:主从复制 + MHA / Orchestrator

  • 支持读写分离

  • 主节点挂掉后可自动切换

❗ 水平扩展:需手动或借助中间件实现

  • 手动分库分表:应用层逻辑复杂,维护成本高

  • 使用中间件:如 ShardingSphere、Vitess、MyCat 等

方式特点
ShardingSphereApache 开源,支持透明分库分表
VitessGoogle 开源,适合超大规模 MySQL 集群
MyCat国内常用方案,适合传统企业改造

五、MongoDB vs MySQL 核心对比总结

项目MONGODBMYSQL
默认支持水平扩展✅ 是,通过分片(Sharding)❌ 否,需借助中间件
默认支持高可用✅ 是,通过副本集(Replica Set)✅ 是,通过主从复制
水平扩展 + 高可用结合度✅ 天然结合,架构统一⚠️ 需额外配置,复杂度高
开发友好度✅ 对应用透明,改连接即可❌ 应用层逻辑复杂,容易出错
运维难度✅ 官方集成好,部署简单⚠️ 配置复杂,依赖组件多
适用场景非结构化/半结构化数据、大数据、高并发结构化数据、事务强一致性、中小规模

六、一句话总结

MongoDB 通过“分片集群 + 副本集”的方式,天然实现了“水平扩展 + 高可用”并存的能力。而 MySQL 默认只支持高可用,要实现水平扩展必须依赖中间件或手动分库分表,架构复杂度更高。

MongoDB完全指南:从CRUD到分布式集群实战 MongoDB 是一个文档数据库,为简化应用程序的开发与扩展而设计。 阅读详情

相关推荐

MongoDB分片集群架构设计与生产落地指南

分片(Sharding)是分布式数据库应对海量数据的核心扩展机制,其本质是通过水平拆分将单机存储、计算与I/O压力分散至多个节点。原理上依赖分片键路由、元数据管理与无状态查询代理三者协同,技术价值在于突破单节点物理瓶颈,支撑千万级DAU与TB级数据规模。典型应用场景包括高并发用户系统、实时订单处理、物联网设备数据接入等。本文聚焦MongoDB分片集群的架构演进逻辑,深入解析Shard Server、Config Server与Mongos三大组件的职责边界与性能拐点,并结合Sharding键设计原则、哈希/

android_mylove的专栏 456

MongoDB分片和水平扩展

MongoDB分片是指将一个MongoDB集合的数据分散存储到多个物理机器上,以实现数据的水平扩展和负载均衡。分片可以提高读写吞吐量和存储容量,并且可以根据实际需求动态扩展。

互联网知识分享 856

MongoDB的水平扩展,你做对了吗?服务器

每个分片都可以运行在独立的服务器上,这样就可以实现数据的并行处理和存储容量的扩展。分片键决定了如何将数据分散存储在不同的分片服务器上,因此应根据数据的访问模式和分布选择合适的分片键。分片键决定了如何将数据分散存储在不同的分片服务器上,因此应根据数据的访问模式和分布选择合适的分片键。配置服务器用于存储分片集群的元数据,而查询路由器则负责将查询路由到正确的分片服务器上。配置服务器用于存储分片集群的元数据,而查询路由器则负责将查询路由到正确的分片服务器上。字段的哈希值将数据分散存储在不同的分片服务器上。

TpCode的博客 271

MongoDB笔记

MongoDB的简要介绍

zhongzhh8的博客 1529

MongoDB 分片总结

是指:将数据拆分,将其分散在不同机器的过程,有时也用分区(partitioning)来表示这个概念。将数据分散在不同的机器上,不需要强大的大型计算机就能存储更多的数据,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。注意: 副本集:能解决自动故障转移,主从复制,集群。解决的问题:数据冗余备份,架构高可用;但不能解决单节点压力问题(硬件限

数据知道的博客 3万+

MongoDB --- 运维部分之集群模式下分片集的搭建与使用

分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能力,对于开发者来说可以做到开箱即用。

编码爱好者 414

MongoDB分片集群架构详解

MongoDB分片集群架构详解

持续学习,坚持原创,分享技术笔记及经验。 2505

MongoDB集群搭建与管理:利用分片与ReplicaSet实现高效扩展

MongoDB是目前流行的NoSQL数据库之一,它的集群特性可以为大数据量和高并发读写提供强有力的支撑。集群是指一组协同工作的数据库实例,共同承担数据库服务的请求和数据存储任务。分片技术(Sharding)是一种将数据分散存储在多个服务器的方法,每个服务器称为一个分片(Shard)。分片技术的作用是提高数据库的可扩展性、性能和可靠性。通过分片,一个大型数据库可以拆分成更小、更易于管理的部分,从而实现负载均衡,减少单点故障的风险,同时还能提高数据的读写吞吐量。

weixin_28736145的博客 806

分布式专题(7)之MongoDB分片集群&高级集群架构详解

chunk的意思是数据块,一个chunk代表了集合中的“一段数据”,例如,用户集合(db.users)在切分成多个chunk之后如图所示:chunk所描述的是范围区间,例如,db.users使用了userId作为分片键,那么chunk就是userId的各个值(或哈希值)的连续区间。chunk的切分方式,决定如何找到数据所在的chunkchunk的分布状态,决定如何找到chunk所在的分片。

jokeMqc的博客 1849

Calpuff模型实战:从气象数据预处理到污染物扩散模拟全流程指南

本文提供了一份详尽的Calpuff模型实战指南,涵盖从气象数据预处理、地形处理到污染物扩散模拟与结果可视化的全流程。重点解析了Calmet气象场构建、Calpuff核心参数配置,并与AERMOD模型进行对比,帮助环境工程师与科研人员掌握这一强大的三维非稳态拉格朗日扩散模型,以应对复杂地形、海岸熏烟等实际模拟挑战。

s4t5u6v7的博客 459

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 806

MongoDB分片集群架构实战

分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能力,对于开发者来说可以做到开箱即用。

Zhuxiaoyu_91的博客 1754

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

MongoDB 分片集群架构中的分片策略

chunk的意思是数据块,一个chunk代表了集合中的“一段数据”,例如,用户集合(db.users)在切分成多个chunk之后如图所示:chunk所描述的是范围区间,例如,db.users使用了userId作为分片键,那么chunk就是userId的各个值(或哈希值)的连续区间。集群在操作分片集合时,会根据分片键找到对应的chunk,并向该chunk所在的分片发起操作请求chunk的切分方式,决定如何找到数据所在的chunkchunk的分布状态,决定如何找到chunk所在的分片。

csdn1234561231的博客 2453

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

深度学习中的注意力机制

最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。本文以机器翻译为例,深入浅出地介绍了深度学习中注意力机制的原理及关键计算机制,同时也抽象出其本质思想,并介绍了注意力模型在图像及语音等领域的典型应用场景。

优快云人工智能 4万+

2. MongoDB分片集群架构实战-----MongoDB分片集群和多文档事务详解

分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表"。不同的点在于,MongoDB本身就自带了分片管理的能力,对于开发者来说可以做到开箱即用。为什么要使用分片?MongoDB复制集实现了数据的多副本复制及高可用,但是一个复制集能承载的容量和负载是有限的。在你遇到下面的场景时,就需要考虑使用分片了∶存储容量需求超出单机的磁盘容量。活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。

俺就是菜的很的博客 4040

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

MongoDB基础入门到深入(五)分片集群

分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能力,对于开发者来说可以做到开箱即用。

秃了也弱了 1136

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3818

【科研数据获取】根据Excel表个中的企业/公司信息批量获取经纬度坐标,并进行地图可视化

批量获取企业/公司的经纬度坐标,并进行地图可视化1 需求2 实现途径3 需求逐步实现 1 需求 在做项目的时候,老板或者项目答辩时候甲方最喜欢看到的就是可视化结果,尤其是涉及到地图可视化。很多时候会遇到企业/公司的数据,想要做地图可视化,必不可少的就是要获取它们具体地址:第一种就是像查户口一样精准一下具体的城镇街道,还有一种就是经纬度信息,前一种属于文字内容往往用于管理方面,第二种数字信息多用于数据处理与分析。 2 实现途径 获取地理信息数据,自然需要使用到地图的功能,这里直接采用百度地图的拾取坐标系统,

lys_828的博客 2337

猿创征文|MongoDB数据库 分片集群搭建部署实战

MongoDB数据库、分片集群搭建教程;使用mtools搭建MongoDB复制集和分片集群,其包括MongoDB日志分析、报表生成及简易的数据库安装等功能。

yaya_jn的博客 2286

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MongoDB 分片集群架构详解】

MongoDB分片集群架构详解

weixin_42492504的博客 1334

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MongoDB分片集群搭建

啥是分片 分片(sharding)是MongoDB用来将大型集合水平分割到不同服务器(或者复制集)上所采用的方法。不需要很强大的大型计算机就可以存储更多的数据,处理更大的负载 为啥要分片 存储容量需求超出单机磁盘容量 活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。 IOPS超出单个MongoDB节点的服务能力,随着数据的增长,单机实例的瓶颈会越来越明显 副本集具有节点数量限制 ps:垂直拓展vs水平拓展 垂直拓展:增加更多的cpu和存储资源来扩展容量 水平拓展:将数据集分布在多

蛋蛋的碎碎念 516

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MongoDB入门与实战-第六章-MongoDB分片

mongodb分片 猿创征文|MongoDB数据库 分片集群搭建部署实战 MongoDB 分片集群介绍在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。应用程序不必知道哪片对应哪些数据,甚至不需要知道数据已经被拆分了,所以在分片之前要运行一个路由进程,进程名,这个路由器知道所有数据的存放位置,所以

Blueeyedboy521的博客 1154

MongoDB的索引事物和高可用分析

MongoDB是一个基于分布式文件存储的数据库,MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的数据库产品。

CoLiuRs 836
上一篇: Java 泛型详解
下一篇: Windows 下 Kafka 安装教程(保姆级)
Lfqq
博客等级 码龄7年 228粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值