Mongodb 中副本的磁盘使用情况非常奇怪

Mongodb 中副本的磁盘使用情况非常奇怪

总结:新的 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 是一个新版本,但是磁盘上的数据库怎么会超过主数据库和辅助数据库呢?任何指示都会非常有帮助。

答案1

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

相关内容