MST
星途 面试题库

面试题:MongoDB均衡器工作原理简述

请简要描述MongoDB均衡器的工作原理,包括它如何检测数据分布不均衡以及进行数据迁移的基本流程。
32.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. 检测数据分布不均衡

  • 基于chunk的统计:MongoDB将数据划分为多个chunk,每个chunk包含一定范围的数据。均衡器会定期检查每个chunk的大小以及chunk在各个分片上的分布情况。例如,通过统计每个分片上chunk的数量和数据量,来判断是否存在某一分片上chunk数量过多或数据量过大的情况。
  • 阈值设定:MongoDB设置了一些默认的阈值。如果某一分片上的chunk数量或数据量超过这些阈值,就认为数据分布不均衡。比如,当一个分片上的chunk数量比其他分片平均chunk数量多出一定比例(如50% ),或者数据量超过其他分片平均数据量的一定比例时,就触发数据迁移。

2. 数据迁移基本流程

  • 均衡器启动:当检测到数据分布不均衡达到触发条件时,均衡器开始工作。它是一个后台进程,在集群的config server上运行。
  • 选择迁移chunk:均衡器根据预先设定的规则,从数据量较大或chunk数量较多的分片(源分片)中选择一个或多个chunk作为迁移对象。选择chunk时会考虑多种因素,如chunk的数据量、迁移成本等。
  • 确定目标分片:根据当前各个分片的负载情况,选择一个负载相对较低的分片作为目标分片。目标分片要能够容纳即将迁移过来的chunk数据。
  • 迁移执行
    • 锁定chunk:在源分片上,首先锁定要迁移的chunk,防止在迁移过程中有其他读写操作干扰。
    • 复制数据:源分片将chunk的数据复制到目标分片。这个过程中,源分片继续处理读请求,而写请求会被记录在oplog(操作日志)中。
    • 应用oplog:目标分片接收到数据后,开始应用源分片oplog中记录的写操作,以保证数据的一致性。
    • 完成迁移:当目标分片成功应用完所有写操作,且确认数据与源分片一致后,在config server中更新chunk的元数据,将其标记为属于目标分片,然后在源分片上删除该chunk,完成整个迁移流程。