1、平衡简介
如果存在多个可用的分片,只要块得数量足够多,MongoDB就会把数据迁移到其他分片上,这个迁移过程叫做平衡(balancing),由叫做平衡器(balancer)的进程负责执行。
2、平衡工作流程
平衡器会把数据块从一个分片挪到另外一个分片上,其优点在于自动化,即你无需担心如何保持数据在分片间的均匀分布,这项工作已经由平衡器替你搞定,不过这也是它的缺点,因为自动意味着如果你不喜欢塔做负载均衡的方式,那只能算你不走运,如果不想让某个块存在于分片3上,你可以手动移动到分片2上,但是平衡器很可能把它再挪回分片3,你只能选择要么对集合重新分片(re-shard),要么关闭平衡化。
在此之前平衡器的算法还不是很智能,它每天基于分片整体大小来移动块,在不久的将来它将变得更加先进。
平衡器的目标不仅是要保持数据均匀分布,还要最小化被移动的数据量,因此触发平衡器需要很多条件,要触发一轮平衡,一个分片必须比块最小的分片多出至少9个块,到那时候,块就会被迁移出拥挤的分片,直到与其他分片平衡为止。
平衡器并不非常激进的原因在于MongoDB希望能够避免将相同数据来回移动,如果平衡器要平衡掉没一点微小的区别,那很可能会不停地浪费资源:分片1比分片

MongoDB的平衡器自动执行数据在分片间的迁移以保持均匀分布。平衡工作流程包括根据分片整体大小进行块迁移,但只有在分片间块数量差距达到一定阈值(至少9个块)时才会触发。为了避免频繁的数据移动,MongoDB采用了一种相对保守的平衡策略。此外,文章提到了两个技巧:自定义块大小和递增块大小,以适应生产和测试环境的不同需求。
订阅专栏 解锁全文
3078

被折叠的 条评论
为什么被折叠?



