当超过maxsize时会发生什么

时间:2013-12-01 20:45:12

标签: mongodb

当群集的大小上升时,块被分割。文档说“平衡器不会从重载的碎片移动块。这必须手动发生。”(doc here)。那么,已经达到maxsize限制的碎片的还原块将被移动到另一个未超过maxsize的碎片,或者它们是否会保留在同一个碎片上,并且必须手动将这些额外的字节和块移出碎片?

1 个答案:

答案 0 :(得分:1)

  

文档说“平衡器不会从重载的碎片中移出块。这必须手动进行。”那么,已经达到maxsize限制的碎片的还原块将被移动到另一个未超过maxsize的碎片,或者它们是否会保留在同一个碎片上,并且必须手动将这些额外的字节和块移出碎片?

这特定于您为分片设置了maxSize限制并且已达到该限制时。平衡器将不再将块迁移到该分片,并且它将保持“完整”,除非您通过sh.moveChunk()手动将一些块移动到另一个分片。默认行为是没有设置maxSize,因此分片可以使用尽可能多的磁盘空间。

  

我的情况是我有2台服务器,其中一台硬盘比另一台硬盘大。因此,如果一个是500GB而另一个是1TB并且第一个充满了数据,那么当我向服务器添加更多数据时会发生什么。平衡器是否知道第一个已满并将额外数据从第一个服务器传输到第二个服务器?

MongoDB基于逻辑chunks在分片之间平衡数据,逻辑Sharded Collection Balancing是基于您选择的分片键的连续值范围。默认情况下,块表示大约64MB的数据。

MongoDB不知道底层磁盘配置,因此如果带有shardA的服务器的磁盘空间是带有shardB的服务器的两倍,则平衡器仍然只考虑与每个碎片关联的的数量(不是实际的磁盘使用情况)。理想情况下,所有分片在硬件和磁盘空间方面都应具有类似的配置。

如果您使用maxSize选项限制特定分片上的存储空间,则此设置仅控制在达到maxSize后平衡器是否将块移动到该分片。

有关详细信息,请参阅MongoDB文档中的{{3}}。