gpt4 book ai didi

Mongodb - 分片 - 同时添加多个分片

转载 作者:可可西里 更新时间:2023-11-01 09:33:37 27 4
gpt4 key购买 nike

我有一个带有 4x 分片的生产 mongodb 部署 (3.6),它运行良好。我想向集群中添加 4 倍以上的分片。一次添加多个分片是否可以,或者这会引起戏剧性事件吗?我发现添加分片是一项昂贵的操作,在我看来,同时添加分片可以避免来回传输数据,从而提高性能。谢谢,

最佳答案

当您添加分片时,所有分片集合都需要重新平衡它们的数据,这意味着移动 block 直到所有分片具有大致相同数量的 block 。过去(3.4 之前)在 block 迁移方面没有并行性,但是现在集群上可以发生的并行迁移的数量与集群中的分片数量直接相关。来自 3.4 补丁说明:

for a sharded cluster with n shards, MongoDB can perform at most n/2 (rounded down) simultaneous chunk migrations

现在这意味着您可以同时进行 2 次迁移,如果您增加到 5 个总分片,您将不会获得任何额外容量。但是,6 个分片可以同时进行 3 次迁移,而最终的 8 个分片可以进行 4 次同时迁移。

除了一次有更多的迁移,一次添加更多的分片减少了必须发生的迁移总数(如果你添加一个,重新平衡;添加另一个,重新平衡等等。你最终会比仅添加 4 个分片并进行一次重新平衡更多的总迁移)。

为了说明,考虑一些简单的场景,使用具有 400 个 block 的理论集合,以及每次达到平衡需要多少步:

场景 1 - 一次添加一个分片

1st addition: # of migrations = 80
2nd addition: # of migrations = 66 (22)
3rd addition: # of migrations = 55 (28)
4th addition: # of migrations = 50 (13)
Total migrations = 251

场景 2 - 一次添加 2 个分片

1st addition: # of migrations = 66 (22)
2nd addition: # of migrations = 50 (13)
Total migrations = 116

场景 3 - 立即添加 4 个分片

Total migrations = 50 (13)

括号中的数字表示如果我们假设最大并行化并假设所有迁移花费相同的时间,则必须发生多少顺序迁移操作。综上所述,我认为从迁移吞吐量和效率来说,立即加4是最好的做法。

然而,缺点是对集群的影响。正如您所提到的,迁移不是免费的(尽管它们比以前更有效,尤其是使用新的 WiredTiger 默认设置时),而且您的迁移越多,它们的影响就越大。因此,与大多数事情一样,这是一种权衡。

我们甚至还没有考虑哪些集合最大、最忙或拥有最多的 block 。您可以采用多种策略来最大程度地减少对用户性能的影响(例如,您可以为最重要、最繁忙的集合禁用平衡,最后执行它们,但让其余的立即重新平衡,例如)。

因此,我无法给你一个明确的答案,但如果你考虑以上所有因素,你应该能够为你的数据和集群做出正确的决定。

关于Mongodb - 分片 - 同时添加多个分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com