首页 > 数据库 >MongoDB新的均衡策略和自动合并

MongoDB新的均衡策略和自动合并

时间:2024-10-11 12:10:28浏览次数:1  
标签:阈值 MongoDB 分片 合并 均衡 均衡器 迁移 数据

均衡器的用途

均衡器是一个后台线程,运行于配置服务器(config server)副本集的主节点。它定期检查分片中块(chunks)和数据的分布情况。如果达到某些迁移阈值,均衡器就会决定将块从一个分片迁移到另一个分片。其主要目标是在所有分片中拥有大致相同的数据量。

 

在繁忙的集群中,迁移的成本可能很高。每次迁移都需要从源分片读取大量文档,然后写入目标分片。因此,有一个限制:给定一个分片对(shard pair),每次只能移动一个分片。因此,在 N 个分片集群中,最多只能同时迁移 N/2 个分片。

 

如果你在集合中定义的所有分块键都是最优的,那么均衡器管理的迁移量应该是最小的,或者最终接近于零。如果分块键不理想或集合设计不合理,就会导致大量昂贵的迁移,从而拖慢整个集群的运行速度。更糟糕的情况是,均衡器无法运行所有需要的迁移,这样就会导致集群不平衡,无法管理。

 

如果没有定义好分片键,你也可以改变主意,创建新的分片键。遗憾的是,对大型数据集重新分片的成本很高,应尽量避免。

均衡器的策略

均衡器在开发之初就设定了当分片达到特定的迁移阈值时,对分片中的某一块进行迁移。这些阈值适用于拥有最多数据集数据块的分片与拥有最少数据集数据块的分片之间的数据块数量差异。

 

均衡器会持续地将块从源分片移动到块数较少的目标分片,确保数据可用于读写。这个简单的逻辑有助于在所有分片中保持大致相同的块数。

 

下表显示了迁移阈值。

块数

迁移阈值

小于20

2

20--79

4

超过80

8

遗憾的是,这种逻辑有一些局限性。在许多使用案例中,有可能拥有不同数据量的数据块。有些数据块可能是满的,接近允许的最大数据块大小,而另一些数据块可能接近空。这主要取决于你在集合中定义的分片键。如果你的分块键不够理想,不能提供均匀分布的值,那么就有可能出现这种情况。

 

均衡器进行的迁移可以起到帮助作用,但要记住迁移的成本很高,而且在某些情况下执行迁移的速度不足以确保数据的均匀分布。分片之间的数据差异可能会持续扩大。

 

从 MongoDB 6.0 版开始,均衡器逻辑发生了重要变化。策略不再计算分片中块的数量,而是计算分片中数据的实际大小。迁移阈值仍然有效,但现在无论有多少块,它们都基于数据的实际大小。

 

如果一个数据集的分片之间的数据差异小于该数据集配置范围大小的三倍,那么该数据集就被认为是平衡的。对于 128 MB 的默认范围大小,只有当同一数据集的两个分片之间的数据大小差异至少达到 384 MB 时,才会发生迁移。该阈值受块的最大大小影响。设置不同的块大小也会改变阈值,计算公式仍然为块大小的三倍。

 

新策略有助于获得更均衡的群集,即使在分片建并非最佳的情况下也是如此。不过,请记住,非常糟糕的分片键会导致集群非常不稳定。新的均衡器策略并不神奇,无法帮助解决糟糕的情况。

新的自动合并(Automerger)功能

合并块一直都可以手动完成。有了 mergeChunks 管理命令,就可以合并同一分片中连续的数据块。合并可以避免有太多数据量过少的数据块。更多的块也会使配置数据库变大,降低效率。从 7.0 版开始,均衡器内部部署了新的自动合并功能。也可以使用 mergeChunks 命令进行手动合并。

 

Automerger 作为配置服务器副本集主节点中常规 Balancer 线程的一部分运行。

 

每次执行时,自动合并器都会检查同一集合中符合特定合并要求的数据块,并自动将它们合并。可以同时合并两个或多个数据块。这里列出了可合并性要求,所有要求都必须满足:

·数据块必须位于同一分片中

·它们不是巨型块( jumbo chunks)

·它们的历史记录可以在不中断事务和快照读取的情况下被安全清除

如果需要,可以禁用或配置 Automerger,使其仅在均衡器窗口期间运行。可以通过mongosh客户端进行开启或者禁用。比如:

开启

sh.enableAutoMerger( <namespace> )

禁用

sh.disableAutoMerger( <namespace> ) 

 

也可以使用以下管理命令:

db.adminCommand(
  {
    configureCollectionBalancing: "<db>.<collection>",
    chunkSize: <num>,
    defragmentCollection: <bool>
    enableAutoMerger: <bool>
  }
)

Automerger 是能帮助你自动优化集群,不再需要考虑手动合并块的问题。在文档中,你可以获得更多详细信息: https://www.mongodb.com/docs/manual/core/automerger-concept/

总结

7.0 中引入的 Automerger 和 6.0 中的新 Balancer 策略可以简化管理任务,并有助于获得更稳定、更可靠的分片集群。

 

MongoDB 发展非常迅速。每年都会发布一个新的主版本,而旧版本在短短几年内就会失去支持。如果还在使用旧版本,建议尽快升级到 7.0。5.0 版本的生命周期将于 2024 年 10 月结束。6.0 版本将于 2025 年 7 月到期。

标签:阈值,MongoDB,分片,合并,均衡,均衡器,迁移,数据
From: https://www.cnblogs.com/abclife/p/18451442

相关文章

  • MongoDB集群的启动和关闭顺序
    分片(Shard)环境中的启动和关闭1.启动这个具体的参照分片的配置,启动的顺序是configserver->副本集/分片(shardX)->->mongos2.关闭因为mongos是分片架构最前端的入口,所以关闭顺序:mongos->副本集/分片(shardX)->configserver单实例:直接关闭db.getSiblingDB(“admin”).shutdow......
  • 每日算法 88.合并两个有序数组 - Lcode
    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了......
  • 尚硅谷rabbitmq 2024 第50节 集群负载均衡 核心功能 答疑
    消费者用@RabbitListener或者@KafkaLisenter,那生产者呢(springboot)在SpringBoot中,生产者可以使用`RabbitTemplate`来发送消息到RabbitMQ。以下是一个简单的示例:```javaimportorg.springframework.amqp.rabbit.core.RabbitTemplate;importorg.springframework.beans.fac......
  • 提升网站响应速度与可靠性:Nginx负载均衡最佳实践 转载
    负载均衡配置作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。1.1upstream块语法:upstreamname{...}配置块:httpupstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pa......
  • 合并排序
    一.算法介绍合并排序(MergeSort)是一种高效的、基于比较的排序算法,采用分治策略进行工作。其基本思想是将数组分成两半,递归地对每半部分进行排序,然后将两个有序的半部分合并成一个有序序列。二.算法步骤合并排序可以分为两个主要步骤:1.分解:将待排序的序列分解成尽可能小的子序列,......
  • MongoDB
    安装Homebrew:brewtapmongodb/brewbrewupdatebrewinstallmongodb-community相关路径(AppleSilicon):配置文件路径:/opt/homebrew/etc/mongod.conf日志文件路径:/opt/homebrew/var/log/mongodb数据目录:/opt/homebrew/var/mongodb参考:安装MongoDB|MongoDB手册使用......
  • 合并、删除区间算法C++代码
    #include<algorithm>#include<iostream>#include<vector>usingnamespacestd;classSolution{public:constintCOMBINE_INT=0;//1表示整数点区间,比如[1:3]和[4:5]会合并为[1:5],0则仅会合并[1:3]和[3:4]这类的区间。vector<pair<int,int>>......
  • MongoDB分片键选择指南
    MongoDB分片键选择指南特别是华为Mongodb4.0集群的使用,更能提高查询效率MongoDB是一款高性能的NoSQL数据库,能够处理大量数据并支持水平扩展。为了实现这一点,MongoDB使用了分片技术,而选择合适的分片键对性能和可伸缩性有着至关重要的影响。第一步:理解分片的工作原理MongoDB的......
  • PDF电子发票怎么合并在一起,免费在线教学
    在日常生活和工作中,我们常常需要处理多个PDF格式的发票。这些文件可能来自不同的商家或服务,而合并它们成为一个文档,不仅方便查阅,还能帮助我们更好地管理财务。今天,我将为大家提供一份简单易懂的教程,教你如何免费合并多个PDF发票,轻松实现文档整合。为什么需要合并PDF发票?合并......
  • EasyExcel读取合并单元格数据
    EasyExcelEasyExcel文档地址:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read一、前言当excel表格的数据表头和内容都比较工整,每个单元格对应一个数据时,通过EasyExcel可以很容易就将数据读取出来。但是当表格数据存在合并单元格时,还是按照EasyExc......