Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >《一起学mongodb》之第三卷分片集群

《一起学mongodb》之第三卷分片集群

作者头像
moon聊技术
发布于 2022-02-17 02:31:00
发布于 2022-02-17 02:31:00
5440
举报
文章被收录于专栏:moon聊技术moon聊技术

前言

上一篇介绍了 mongo 的三种部署方式,「单点、主从、副本集」三种部署方式,今天就跟大家聊聊最后一种「分片集群」的方式,分片集群也是 mongo 能够作为万亿级别数据库的核心魅力所在,也有一句话说到:

「连分片集群都不知道,你还好意思说自己用过 mongo ?」

分片集群架构

其他的不多说,我们先甩一张分片集群的架构图

在分片集群当中,一共有以下三种角色

  • mongos:路由层,主要用来处理客户端的请求,连接客户端与 shard
  • config server:主要用来存储分片集群的元数据和配置信息
  • shard:每个 Shard 就相当于一个 mongod 数据库实例,用于存储数据,整个数据库会「分散在不同的 shard 当中」,每一个分片都满足高可用,一般都是一主二从(建议部署位副本集架构),分片的个数最大可以到1024个

一个集群包含了多个分片组成,而一个分片又存储了多个块(每个块包含一定范围片键的数据,互不相交且并集为全部数据),一个块当中包含了多个文档。

那么问题来了-

mongoDB 是怎么做数据分片的?

mongo 提供了「三种方式来做数据分片

哈希分片

这是很多技术最常用的一种方式,就是将数据通过 hash 散列化,打在不同的机器上,实现「均匀分布」,但是它很大的问题就是「数据不连续」,比如业务需要查询工资在 10000~20000 之间的人员,你可能就需要遍历每一个分片了

范围分片

这种策略直接根据片键的范围确定分片。

比如现在我们将数据在逻辑上分为四个块。

在数据上数据 工资 0~5000一个块,5000~10000 一个块,10000~15000 一个块,15000~20000 一个块,20000~25000 一个块,25000 以上一个块,由于公司人员薪资分布大概率都在 5000~15000,这个区域内,就会造成数据过分集中在 5000~10000 、10000~15000 这两个块儿中,造成「数据分布不均匀」,但是再做「范围查询的时候效率就会很高」

zone 分片

简单来说 Zone 实际上像是范围分片的另一个版本,你为一定范围内的片键制定一个 Zone,然后再将一些分片加入到这个Zone中,于是这一范围内的数据最终就将存储在这个 Zone 中的分片上。

Chunk(块) 分裂

随着数据慢慢的写入,数据量越来越大,当 Chunk 增长到指定大小(默认为 64MB)时,MongoDB 会 对 Chunk 进行分裂。

Chunk 分裂的⽅式

  • ⼿动触发
  • ⾃动触发:当发生插⼊和更新操作才会触发⾃动块分裂。

JumboChunk 是一个最小的 Chunk 可以「只包含一个唯一的 ShardKey」,这样的 Chunk 不可以再进行分裂。

那么如果数据分片不均 mongoDB 是怎么做的?

这个时候就要说到我们的 「balancer(平衡器)」 了,用来「保证集合的 Chunk 在各个 Shard 上是均衡的」

当某些分片数据不均匀的情况下,balancer 会发出一个命令让切割器去需要移动的分片上去做数据切割,再把数据移动到数据少的分片上。具体的步骤如下:

  • 平衡器向源分片发送 moveChunk 的命令
  • 源分片收到命令后,会启动自己内部的一个 moveChunk 命令,如果在数据移动过程中有客户端发来读写请求的话,都会发送到源分片。
  • 目标片开始向源分片请求将要移动的数据块的文档,准备拷贝文档数据。
  • 当目标分片接收到据块的最后一个文档后,目标分片会启动一个同步进程来检查,是否已经拷贝完全部的文档。
  • 当同步完成后,目标分片会连接配置服务器,更新元数据列表中数据块的地址。
  • 当目标分片完成元数据更新后,源分片就会删除原来的数据块.如果有新的数据块需要移动的话,可以继续进行移动。
  • 配置服务器会通知 monogs 进程更新自己的映射表。

迁移过程对于应用是透明的,但由于「迁移过程会占用相应节点的 CPU 和带宽资源」,因此对分片集有一定程度的性能影响,并且对运维操作存在一些限制。

在对集合进行分片后是否可以更改片键?

「不可以」

MongoDB 中没有对集合分片后更改片键的自动支持。如果在集合分片后必须更改片键,可以按如下方式操作:

  • 将MongoDB中的所有数据转储为外部格式,比如可以先放在 mysql 中。
  • 删除原始分片集合。
  • 使用新的的片键配置分片。
  • 预分割片键范围以确保初始均匀分布。
  • 将转储的数据恢复到 MongoDB 中。

mongos 是如何处理连接的?

每个 mongos 实例都「维护一个与分片集群成员的连接池」。客户端「一次请求就会占用一个连接」,客户端请求完成后,连接释放。但是客户端数量减少时,这些池不会收缩。这可能导致未使用的mongos占用大量打开的连接。如果 mongos 不再使用,则可以安全地重新启动进程以关闭现有连接。

总结

今天的内容只讲了分片集群相关的,当你看完了以上内容时,再来看看以下几个问题,「mongoDB 分片集群架构是怎么样的?有哪三种分片方式?块分裂是什么?为什么会有块分裂?分片之间的负载均衡是怎么做的?如何修改分片键?mongos 如何管理与分片之间的连接?」

你都会了吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 moon聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB 分片集群技术
---- 在了解分片集群之前,务必要先了解复制集技术! ----  1.1 MongoDB复制集简介   一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础。 1.1.1 复制集的目的   保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失。能够随时应对数据丢失、机器损坏带来的风险。   换一句话来说,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且,由不同的
惨绿少年
2018/03/30
2.4K0
MongoDB4.0构建分布式分片群集
分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能。当MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或需要部署大型应用以充分利用内存时,可以使用分片技术。
拓荒者
2019/09/19
6360
MongoDB运维与开发(10)---chunk
MongoDB中,在使用到分片的时候,常常会用到chunk的概念,chunk是指一个集合数据中的子集,也可以简单理解成一个数据块,每个chunk都是基于片键的范围取值,区间是左闭右开。例如,我们的片键是姓名的第二个字母,包含了A-Z这26中可能,理想情况下,划分为26个chunk,其中每个字母开头的姓名记录即为一个chunk。
AsiaYe
2020/12/14
7600
MongoDB运维与开发(10)---chunk
MongoDB分片迁移原理与源码(1)
单个节点的MongoDB实例,具备MongoDB基本的功能和服务能力,不过缺乏数据冗余和高可用,以及横向扩展的能力,一般很少在实际生产环境中使用。
云计算与数据库
2020/04/01
1.3K0
Mongodb分片集群部署
对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战。频繁的CRUD操作能够耗尽服务器的CPU资源,快速的数据增长也会让硬盘存储无能为力,最终内存无法满足数据需要导致大量的I/O,主机负载严重。为了解决这种问题,对于数据库系统一般有两种方法:垂直扩展和分片(水平扩展)。
拓荒者
2019/09/10
2K0
Mongodb分片集群部署
MongoDB 6.0.3分片Sharding与平衡策略的变化
MongoDB 的分片是一种水平扩展技术,用于将大型数据集分割成更小的部分,分布在网络中的多个服务器(即分片)上,以提高性能和可扩展性。分片机制的核心是将数据块(chunks)分散到不同的分片上,以便实现负载均衡。
DBA实战
2024/09/06
1110
MongoDB 6.0.3分片Sharding与平衡策略的变化
MongoDB分片迁移原理与源码(2)
下面将从源码角度分析与迁移相关的若干过程,源码基于MongoDB-4.0.3版本。
云计算与数据库
2020/04/04
1.2K0
Mongodb 分片集群搭建
一、MongoDB分片介绍 一般的像小型企业和业务量不是太大的集群架构,我们使用MongoDB分片就可以足够满足业务需求,或者随着业务的不断增长我们多做些副本集也是可以解决问题,多搞几个主从就可以了。还有一种情况是,类似于腾讯或者阿里有着庞大的集群以及业务量和数据量,不可能一个库分成多个库,其实MongoDB也有这种功能叫做分片,也就是今天所用到的!如下: 分片就是将数据库进行拆分,将大型集合分隔到不同服务器上。比如,本来100G的数据,可以分割成10份存储到10台服务器上,这样每台机器只有10G的数据。
老七Linux
2018/05/09
1.8K0
MongoDB 第一期 :集群搭建
本文主要介绍了如何基于MongoDB搭建高可用集群,包括集群的搭建步骤、配置文件参数解析、集群的监控方式以及如何提高集群的可用性。通过实际例子讲解了如何快速搭建一个高可用的MongoDB集群。
迪B哥
2017/07/06
2K0
MongoDB 第一期 :集群搭建
MongoDB分片原理篇
MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『可扩展性』,通过json文档来实现灵活模式,通过复制集来保证高可用,通过Sharded cluster来保证可扩展性。
林老师带你学编程
2019/05/25
5.8K0
MongoDB 分片管理
一分片一区间:数据不会在片之间自动移动来保持分片的数据的均匀性,需要手动拆分分片来移动数据。
拓荒者
2019/09/12
1.1K0
MongoDB 分片管理
数据库高可用和分区解决方案-MongoDB 篇
许春植(Luocs) (阿里巴巴高级数据库管理员,7年以上数据库运维管理经验,擅长MySQL、Oracle及MongoDB数据库,目前主要研究并建设MongoDB一套完整的运维体系) 编辑手记:感谢许春植授权独家转载其精华文章,也欢迎读者朋友向我们投稿。 MongoDB 是当前比较流行的文档型数据库,其拥有易使用、易扩展、功能丰富、性能卓越等特性。MongoDB 本身就拥有高可用及分区的解决方案,分别为副本集(Replica Set)和分片(sharding),下面我们主要看这两个特性。 1. 副本
数据和云
2018/03/05
4.1K0
数据库高可用和分区解决方案-MongoDB 篇
MongoDB 分片
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
为为为什么
2024/09/28
1360
MongoDB 分片
百亿级MongoDB分片集群架构改造
一、问题背景二、集群架构介绍三、MongoDB集群分片键修改方案介绍1、原生MongoDB如何修改分片键?2、数据同步方案解决分片键问题3、MongoDB数据同步工具选型4、业务流量切换四、集群架构改造后的收益五、遇到的问题及解决办法(Q&A)六、总结&优化
AsiaYe
2021/10/14
1.4K0
Shard 分片集群
要构建一个 MongoDB Sharding Cluster,需要三种角色:
MonroeCode
2018/01/12
1.7K0
听说MongoDB你很豪横?-------------MongoDB 部署分片群集以及管理分片
主从复制和副本集区别 主从集群和制本集最大的区别就是副本集没有固定的“主节点";整个集群会选出一个主节点当其挂掉后,又在剩下的从节点中选中其他节点为"主节点"。副本集总有一个活跃点(主primary和一 个或多个备份节点(从secondary)。
不吃小白菜
2020/09/15
6220
MongoDB 分片集群部署
在生产环境中,通常情况使用副本集就够了(使用配置文件部署副本集可跳转:5.x 副本集部署,使用命令行部署副本集可参考这篇文章)。除非容量非常大,并发访问非常高,副本集已经无法正常提供服务时,才建议考虑使用分片。这一节内容就来聊聊 MongoDB 分片。
数据库交流
2022/04/25
1.5K0
MongoDB 分片集群部署
使用MongoDB进行分片
本文档回答了有关分片的常见问题。或者可以参考手册的分片章节,其提供了 分片的概述,包括如下细节:
MongoDB中文社区
2019/05/15
1.2K0
使用MongoDB进行分片
搭建高可用mongodb集群(四)—— 分片
Posted on 29 三月, 2014 by lanceyan | 104 Replies
拓荒者
2019/09/10
1.4K0
MongoDB 在评论中台的实践
随着公司业务发展和用户规模的增多,很多项目都在打造自己的评论功能,而评论的业务形态基本类似。当时各项目都是各自设计实现,存在较多重复的工作量;并且不同业务之间数据存在孤岛,很难产生联系。因此我们决定打造一款公司级的评论业务中台,为各业务方提供评论业务的快速接入能力。在经过对各大主流 APP 评论业务的竞品分析,我们发现大部分评论的业务形态都具备评论、回复、二次回复、点赞等功能。
2020labs小助手
2021/03/02
2K0
相关推荐
MongoDB 分片集群技术
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档