繁体   English   中英

当MongoDB集群中的一个分片用完磁盘空间时会发生什么?

[英]What happens when one shard in a MongoDB cluster goes out of disk space?

l
当MongoDB集群中的一个分片空间不足时,会发生什么? 是否会将所有新文档写入剩余的分片中,并且整个群集将继续正常运行? 还是这种情况永远不会发生,因为平衡器将确保碎片平均分配?

内容:
我有一个独立的mongod实例(A)在具有500GB磁盘空间的计算机上运行,​​并且磁盘空间不足。 从那以后,我就对数据库进行了分片,以使我们不会用完磁盘空间-到目前为止,集群有2个分片(A和B)。

分片成功后,我可以看到mongodb在B上占据了大约100GB的空间,因为有大量块正在迁移到新的分片上。 但是,我可以看到,它在分片A(原始的独立mongod实例)上又占用了30GB的额外空间。 经过一番研究,MoveChunk目录似乎占据了其中约28GB的空间,我认为可以安全地删除该目录?

MongoDB版本-2.6.5

首先,通读我在这里写的有关块平衡的内容,以了解其实际工作原理。 TL; DR版本是不,平衡器不会关心分片的填充量,它只关心使每个分片上的块计数相同。

要回答标题问题:当一个分片空间用完时,插入该分片上存在的块范围将失败。 它也可能会进入不良状态,并最终会崩溃(尽管MongoDB在处理这类问题方面已经做得更好)。

基本上,我的建议是:不要让这种情况发生-您无法真正预测空间不足时数据库可能会处于哪种状态,因此最好不要碰到那一点而不是尝试处理它之后(稍后再讨论)。

关于moveChunk文件:是的, 一旦分片平衡 moveChunk 可以将其删除

接下来,您应该了解 MongoDB中如何使用/重用空间 -分片并且文档开始移动到新的分片时,它们已在旧的分片上删除。 但这并不意味着磁盘上的空间已被回收,并且该分片将继续看到通常添加的新文档(取决于您选择的分片键)。 因此,即使在清理之后,您仍可能会看到数据增长。

我要说的是,您最终可能会用完空间,并且想要避免这种情况。 您提到您正在运行一个节点,这实际上意味着您将需要花费一些时间来回收磁盘空间。 因此,我看到了两种可能的路径:

  1. 将独立版本转换为副本集( 请参阅指南 ),然后在节点回收空间中旋转(转换的最短停机时间)
  2. 拆下碎片并进行修复 (较长的停机时间,通常受磁盘速度限制)

我会走第一条路。 完成必要的工作后,如果愿意,您甚至可以返回到单个节点(单节点副本集=无停机时间,独立mongod =可以从副本集转换回停机的停机时间)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM