Open edX и split mongo занимают место на диске

Я использую Open edX, который использует MongoDB для хранения курсов. мы запускаем набор из трех узлов. В настоящее время он использует split mongo - функцию, которая делает копию текущего документа (резервную копию) перед редактированием. Со временем это накапливается, что приводит к потреблению большого дискового пространства. В настоящее время существует около 30 курсов, и когда я экспортирую его, он потребляет около 2-3 ГБ. Однако дисковое пространство, которое он фактически использует,

Я пытался очистить нежелательные курсы с помощью этого скрипта

После выполнения этого в основном члене, это занимает некоторое время и удаляет все ненужные документы. Но это не освобождает дисковое пространство.

rs0:SECONDARY> db.stats()
{
        "db" : "edxapp",
        "collections" : 5,
        "objects" : 277557,
        "avgObjSize" : 112645.21484235671,
        "dataSize" : 31265467896,
        "storageSize" : 57843929088,
        "numExtents" : 0,
        "indexes" : 6,
        "indexSize" : 6938624,
        "ok" : 1
}


root@mongo:~# df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             4082828       12   4082816   1% /dev
tmpfs             817564      396    817168   1% /run
/dev/xvda1       8115168  1805528   5874364  24% /
none                   4        0         4   0% /sys/fs/cgroup
none                5120        0      5120   0% /run/lock
none             4087804        0   4087804   0% /run/shm
none              102400        0    102400   0% /run/user
/dev/xvdf       62904320 57542660   5361660  92% /edx
/dev/xvdh       72117576    53012  68378164   1% /tmp/repairdb

Я пытался сжать БД, используя

rs0:SECONDARY> db.runCommand( { compact : 'modulestore.structures', force: 'true' } )
{ "ok" : 1 }

Это тоже не помогло.

Может кто-нибудь, пожалуйста, дайте мне знать, как освободить место на диске в такой ситуации? Я хочу сделать это в Prod Server так быстро, как я могу.

1 ответ

Решение

Вам нужно сделать первоначальную синхронизацию. Один вторичный в то время и, наконец, уйти в отставку ваш первичный и сделать начальную синхронизацию на этом тоже.

Итак, вы останавливаете вторичную, а затем удаляете все файлы из узлов dbPath. Запустите узел и дайте ему выполнить первоначальную синхронизацию. Повторите это для всех узлов.

Другие вопросы по тегам