总结:新的 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) 是集合的默认设置。它将在更新期间减少磁盘重定位,但会消耗更多磁盘空间。