非常奇怪的磁盘用于Mongodb副本

tl; dr:新的2.6版本比2.4版本的磁盘空间要多得多。

我们是MongoDB的GridFS的大量用户。 我们目前在2.4,并打算升级到2.6,只需添加一个新的副本成员,并逐渐推荐使用2.4节点。

我们有一个小学,一个中学和一个仲裁者。 以下是当前系统的一些数据:

$ mongod --version db version v2.4.10 Sun Jul 27 13:56:27.250 git version: e3d78955d181e475345ebd60053a4738a4c5268a 

以下是关于数据库的一些数据:

 > db.stats() { "db" : "SomeDatabase", "collections" : 4, "objects" : 2797931, "avgObjSize" : 284877.9334958582, "dataSize" : 797068801344, "storageSize" : 946689860768, "numExtents" : 469, "indexes" : 5, "indexSize" : 251248480, "fileSize" : 950804676608, "nsSizeMB" : 16, "dataFileVersion" : { "major" : 4, "minor" : 5 }, "ok" : 1 } 

正如你所看到的,数据库大约是950GB,并且适合(但几乎不)在主存储和次存储(即1TB存储)。

由于存储空间不足,我给了我想要添加到另一个200G(即1.2TB)的新节点。

下面是新节点的MongoDB版本:

 $ mongod --version db version v2.6.3 2014-07-27T12:01:21.242+0000 git version: 255f67a66f9603c59380b2a389e386910bbb52cb 

使其成为副本集的成员之后,它开始同步就好(就像我们每次旋转ReplicaSet成员一样)。 这是奇怪的地方。 同步几个小时后,达到预期的数据库大小(〜950GB)。 但是,直到它最终填满了整个磁盘并崩溃之后,它才继续下去。

现在,我知道2.6是一个新的版本,但是磁盘上的数据库是如何超过主数据库和次数的呢? 任何指针都会非常有帮助。

在MongoDB 2.6中,PowerOf2sizes( http://docs.mongodb.org/master/reference/command/collMod/#usePowerOf2Sizes )是集合的默认设置。 它会导致更新期间磁盘重新部署更less,但将消耗更多的磁盘空间。