美文网首页
Mongodb系列~集群chunk(1)

Mongodb系列~集群chunk(1)

作者: 开心的蛋黄派 | 来源:发表于2024-05-23 10:44 被阅读0次

一、定义

MongoDB中的基本数据单位是chunk,每个chunk包含多条doc记录。当chunk的大小达到默认值64MB时,系统会自动生成新的chunk来存储后续的数据。可以将MongoDB比作一所学校,chunk则相当于班级,初始时只有一个班级(chunk),随着学生(doc记录)的增多,会逐渐增加新的班级(chunk)。片键决定了如何分配这些“学生”到不同的“班级”。在MongoDB中,随着数据的增长,会产生更多的chunk,而move chunk则相当于在办公楼(分片成员)之间调度班级(chunk)。

二、负责进程

  1. 在MongoDB 3.2版本中,balancer位于mongos进程中,而在4.0版本中,balancer位于config进程中。无论是move chunk过程还是删除数据的逻辑,这两个版本之间基本没有差别。

  2. 一个分片一次只能参与一个chunk的迁移。如果需要从一个分片迁移多个chunk,balancer会一次迁移一个。每次balancer运行完成后,才会开始下一次的balancer过程。

  3. 在balancer过程中,如果有多个集合的数据需要均衡,迁移是随机的,而不是迁移完一个集合再开始下一个集合。

三、拆分阈值

在MongoDB 4.0及以上版本中,当各个分片的chunks数量差距大于2时,balancer就会认为数据不均衡,从而触发迁移。这种设计可能会导致更频繁的迁移,进而可能消耗更多的资源。

四、拆分流程

  1. 原分片启动moveChunk命令,迁移过程中,所有操作仍指向原分片。

  2. 目标分片开始创建所需的索引。在MongoDB 3.0及以后的版本中,moveChunk操作前,目标分片需要存在所有必要的索引。

  3. 目标分片向原分片请求数据,并开始复制数据。

  4. 数据全部复制到目标分片后,目标分片会连接并更新config数据库中对应的chunk信息。

  5. 原分片会异步删除已迁移的chunk数据。

五、迁移对性能的影响

moveChunk操作可能对系统负载产生影响,主要是数据删除阶段的影响较大,而迁移过程中的数据插入影响相对较小。

六、平衡器设置

为了减小balancer对业务高峰期的影响,可以创建一个窗口期,在业务低峰期开启balancer。具体设置如下:

// 设置balancer在每天的23:00到次日的6:00之间运行
use config
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true)

// 取消时间窗口设置
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

通过合理设置balancer的运行时间,可以有效避免其对业务高峰期的影响。

相关文章

网友评论

      本文标题:Mongodb系列~集群chunk(1)

      本文链接:https://www.haomeiwen.com/subject/rujtqjtx.html