Mongo DB不变失败

Pau*_*ter 6 mongodb

我们的+ - 400Gb数据库停在我们的服务器上.

从日志:

2015-07-07T09:09:51.072+0200 I STORAGE  [conn10] _getOpenFile() invalid file index requested 8388701
2015-07-07T09:09:51.072+0200 I -        [conn10] Invariant failure false src/mongo/db/storage/mmap_v1/mmap_v1_extent_manager.cpp 201
2015-07-07T09:09:51.082+0200 I CONTROL  [conn10]
Run Code Online (Sandbox Code Playgroud)

我应该开始寻找什么想法?存储问题?

Qui*_*ger 1

我今天也遇到了这种情况的变体。奇怪的是,我的一个数据文件消失了(或者在从另一台服务器迁移时没有成功)。所有修复/恢复过程都不起作用,因您引用的相同错误而失败。幸运的是,我有一个单独的 mongod,它有一个同名的集合,所以作为一个廉价的黑客,我将(诚然是错误的)数据文件复制到另一台服务器,虽然我知道我不会得到任何数据,但修复工具(例如mongod --repair)然后能够发挥他们的魔力,但正如预期的那样,他们从我复制的错误文件中恢复了一些数据,所以我不得不清除一些文档。幸运的是,这是“mycollection.1”文件,只有 128MB。

我认为这不适用于您的情况,因为您的日志所讨论的丢失数据文件的索引高得离谱。您的日志本质上是说它找不到/data/dbname/mycollection.8388701. 你说你的数据集只有 400GB,所以这么高的索引没有意义。您应该只有大约 200 个数据文件,因为默认情况下大多数数据文件的大小均为 2GB。db.stats()(特别是 fileSize 属性)的结果是什么?

这篇mongolab 博客文章帮助我理解了数据文件结构。

我对你应该从哪里开始寻找的建议:

  1. 运行该db.stats()命令以了解磁盘上的数据实际有多大。
  2. 您的服务器寻找具有疯狂高索引的数据文件是否有意义?如果不是,问题实际上不在于存储,而在于集合/数据库的范围和元数据。
  3. 你的维修工具有用吗?如果您有至少足够的可用磁盘空间作为数据集(在磁盘上)的大小,请尝试mongod --repair、 或db.repairDatabase()工具来开始修复。我假设它不会工作,因为我的修复尝试因相同的invalid file index requested错误而崩溃。
  4. 尝试像我一样复制一个“坏”文件,该文件大致匹配丢失文件的样子(请记住数据文件的文件大小并不完全相同,尽最大努力匹配它并尝试修复)。如果这有效,您的数据文件将被清理(但它确实占用大量磁盘空间)。

希望这有助于为您指明正确的方向。