MongoDB分片组件说明

MongoDB分片组件说明

一个 MongoDB 分片集群由以下三个组件构成,缺一不可:

  • shard:用于存放我们的mongodb数据的,保证数据的高可用性和一致性,所以通常情况下,我们推荐将其部署为我们的副本集(Replica Set)模式,并且最少部署 2 个分片。副本集(Replica Set)的部署可以参考我之前写的MongoDB副本集部署
  • mongos:又称为route,充当查询路由器,提供客户端应用程序和分片集群之间的接口。应用程序直接连接 mongos 即可,可以部署一个或多个。
  • config servers:配置服务器存储集群的元数据和配置(包括权限认证相关)。从 MongoDB 3.4 开始,必须将配置服务器部署为副本集(CSRS,全称是 Config Servers Replica Set)。


MongoDB 分片集群的架构图如下所示,该图片引用自 MongoDB 官网文档

分片(sharding)是MongoDB的一种集群特性,用于满足海量数据的存储和访问需求,简单来说就是将数据按照预定的某种规则(片键)分布存储在集群中的多台机器(shard)上,通过查询路由(query router)和配置服务(config server)来为应用提供透明的操作方式,就像在操作单一数据库一样。

各个shard上的存储单元chunk是由某部分范围片键多个文档组成为了获得最佳的分片效果,必须选择一个合适的片键:既能够保证数据的均匀分布、分散写入,又能在大部分业务查询条件下缩小分片范围以保证查询效率。

片键在创建后无法再更改,片键必须是集合的索引,如果是空集合则自动创建,同时不允许无片键的文档插入集合。


chunk

chunk(块),这东西存在于shard中,是用来存放我们的数据的。这里又不得不说它的两个概念,分裂和迁移!

分裂:当chunk的大小超过配置的chunk size时,MongoDB的后台进程就会对其进行切分,从而避免chunk过大的情况,chunk size的默认值为64M。

迁移:该工作由MongoDB的后台进程balancer负责,balancer(均衡器)会定期监测各个shard上的chunk,如果chunk分裂为了多个小chunk,各个shard上chunk数量不均衡,就会触发chunk在shard间的迁移。

chunk的影响

当我们的chunk迁移恰好遇到业务高峰或者积累了大量的chunk迁移时,对于我们系统的性能影响还是比较大的,可能会直接影响到我们业务上的读写效率。

那如何去尽量规避呢? 

1.指定在规定时间点可以进行chunk迁移(或者关闭balancer),来合理避开业务的高峰期。

2.设置合理的分片键,保证chunk分布均匀,减少chunk迁移的操作。

3.预分片提前分裂,减少chunk的迁移。

 

chunk和balancer的相关操作可以查看我之前写的MongoDB分片集群使用说明,其中有介绍了部分关于chunk和balancer的操作。

posted @ 2022-03-01 16:23  RFAA  阅读(363)  评论(0编辑  收藏  举报