MongoDB - 从损坏的碎片中恢复?

时间:2014-08-25 16:28:49

标签: mongodb sharding

当一个分片被永久损坏时,如何拯救分片的MongoDB群集?

我有一个包含48个分片的MongoDB群集。每个分片都是一个具有一个replicaset的主分片。由于错误的计划(tm),其中一个框用完文件空间而死亡。另一个已经关闭,然后也没空了。由于恶劣的情况(当时正在进行的紧凑()或者修复(),整个碎片都已损坏。

我停止了守护进程,试图修复,但它不会成功。

所以,问题是,我如何接受丢失一个碎片但保留其他好的碎片?有48个分片,其中一个只占我数据的2%。我没有丢失那些数据,但我必须达到正常的健康状态。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

回答已废除,重新回复:

  1. 停止所有盒子上的所有守护进程。
  2. 更改初选的配置文件,使其成为独立实例。
  3. 使用mongoexport或mongodump将该分片的数据转储到文件中。确保该文件包含所需的集合。尝试获取它,以便它不包含_id字段。
  4. 当您完成备份并从盒子移到适当安全的位置时,请进行清理。删除所有数据文件等,并基本上重新创建您的群集。
  5. 从数据备份中重新加载数据。
  6. 请注意,当您重新创建群集时,您应该使用一定/大量的块预先填充它,以便splitchunk进程不会永远占用。

    如果你最终得到了不平衡的碎片(很多碎片在一个而不是另一个碎片),请暂停,关闭平衡器的油门,使其快速实现,一旦它再次平衡,重新开始重新加载。