【问题标题】:Sharding key, chunkSize and pre-splitting分片键、chunkSize 和预拆分
【发布时间】:2012-07-05 14:21:05
【问题描述】:

我已经在一台机器上建立了一个分片集群,按照这里提到的步骤:

http://www.mongodb.org/display/DOCS/A+Sample+Configuration+Session

但我不明白“--chunkSize”选项:

$ ./mongos --configdb localhost:20000 --chunkSize 1 > /tmp/mongos.log &

对于 N 个分片,每个分片应该有 1/N 个文档,将 shard-key 的范围分成 N 个几乎相等的部分,对吧?这会自动修复 chunkSize/shard-size。然后上面的命令处理的是哪个块?

此外,还可以按照特定的键值手动拆分集合,然后将一个块迁移到您想要的任何其他分片。这可以手动完成,甚至由“平衡器”自动处理。它不会与分片设置冲突并混淆配置服务器,或者它们会立即报告任何此类移动吗?

感谢您的帮助。

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

    您可能会混淆一些事情。 --chunkSize 参数设置进行拆分的块大小。 “config”数据库中的“settings”集合与_id“chunksize”查看当前值(如果已设置)。 --chunkSize 选项只会设置这个值,或者对系统进行更改,如果没有设置值,否则将被忽略。

    块大小是以兆字节为单位的大小,高于该大小系统将保留块。这是在两个地方完成的,1)当写入通过 mongos 实例时,2)在平衡期间将块移动到另一个分片之前。因此,它不遵循“数据大小/分片数”公式。您的每块 1Mb 的示例几乎总是一个坏主意。

    您确实可以手动拆分和移动块,尽管这可能会导致块分布不太理想,但它永远不会混淆或破坏配置元数据和平衡器。原因比较简单;平衡器使用相同的命令并遵循相同的代码路径。从 MongoDB 的角度来看,平衡器进程拆分和移动块之间没有显着差异。

    虽然有一些手动拆分和移动块的有效用例。例如,您可能希望手动执行此操作,以便从冷启动(预拆分)开始为非常高的峰值负载准备集群。通常,您将编写一个脚本来执行此操作,或者从已经运行良好的性能测试中加载拆分。此外,您可以观察热块以拆分/移动这些块,以便根据您的应用程序监控的“负载”均匀分布。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      太好了,谢谢!我想我现在明白了。如果我错了,请纠正我:

      我在想如果有 N 个服务器,那么集合的前 1/N 部分 (=chunk1) 将转到 shard1,第二个 1/Nth (=chunk2) 将转到 shard2 等等。当你说没有这样的“公式”时,我搜索了一下,找到了这些链接

      MongoDB sharding, how does it rebalance when adding new nodes?

      How to define sharding range for each shard in Mongo?

      从文档中“chunk”的定义来看,我认为它只是一个数据迁移的单元。当我们在 N 个服务器之间对一个集合进行分片时,总编号。块的数量不一定是 N。它们也不必大小相同。

      一个块的最大大小或者已经在配置数据库的设置集合中设置为默认值(通常为 64MB),或者可以通过使用 --chunkSize 参数指定一个值来手动设置,如上面的代码。根据分片键的值,一个分片可能比另一个分片有更多的块。但是 MongoDB 使用了一个平衡器进程,试图将这些块均匀地分布在分片之间。通过均匀分布,我的意思是它倾向于拆分块并将它们迁移到其他分片,如果它们变得大于它们的限制或者如果一个特定的分片负载很重。这也可以通过遵循平衡器进程使用的同一组命令手动完成。

      【讨论】:

      • 嗯,从技术上讲,它不会尝试平衡块,它会尝试平衡分片之间的分片键。但最终结果通常是相同的。
      • 好吧..你的意思是当节点进入或退出时,平衡器会迁移块,以便密钥分布是均匀的。
      • 好吧,我的意思是它基于分片键而不是块数量来平衡。这就是当分片键分布中存在热点时(例如,有限范围的分片键值的大量数据),它可以正确平衡的原因
      • 平衡器基于块分布进行平衡,而不是数据/块的负载或大小(数据数量或数据量)(尽管这应该大致相当于块分布)。如果块不平衡(通常为 8 个或更多),则它开始移动/迁移一些块。在此过程中,它可能会将它们拆分得更多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2023-03-15
      • 2016-05-06
      • 2013-01-21
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多