Назад | Перейти на главную страницу

Очень странное использование диска для реплики в Mongodb

tl; dr: новая реплика 2.6 съедает много больше дискового пространства, чем у участников 2.4.

Мы активно используем GridFS MongoDB. В настоящее время мы работаем на версии 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
}

Как видите, размер базы данных составляет ~ 950 ГБ, и она подходит (но с трудом) для основного и дополнительного (что составляет 1 ТБ хранилища).

Поскольку у нас мало места для хранения, я дал новому узлу, который хотел добавить в систему, еще 200 ГБ (т.е. 1,2 ТБ).

Вот версия MongoDB с нового узла:

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

После того, как он стал членом набора реплик, он начинает нормально синхронизироваться (как и в любой другой раз, когда мы меняли элементы ReplicaSet). Вот где это становится странным. После нескольких часов синхронизации он достигает ожидаемого размера базы данных (~ 950 ГБ). Однако после этого он просто продолжается, пока, наконец, не заполнит весь диск и не выйдет из строя.

Теперь я знаю, что 2.6 - это новая версия, но почему база данных на диске превышает базы данных на первичной и вторичной базе? Любые указатели были бы очень полезны.

В MongoDB 2.6 PowerOf2sizes (http://docs.mongodb.org/master/reference/command/collMod/#usePowerOf2Sizes) - настройка по умолчанию для коллекций. Это приведет к меньшему количеству перемещений диска во время обновлений, но будет занимать больше места на диске.