2017-08-18 2 views
0

J'utilise Open edX qui utilise MongoDB pour stocker des cours. nous exécutons un jeu de réplicas à trois nœuds. Il utilise actuellement split mongo - une fonctionnalité qui fait une copie du document en cours (sauvegarde) avant de le modifier. Comme le temps passe, cela s'accumule, ce qui entraîne la consommation d'espace disque important. Il y a actuellement environ 30 cours et quand je l'exporte, il consomme environ 2-3 GB. Cependant, l'espace disque, il utilise réellement estOpen edX et split mongo consomment de l'espace disque

J'ai essayé de nettoyer les cours indésirables à l'aide this script

Lors de l'exécution de ce membre dans primaire, il faut un certain temps et supprime tous les documents indésirables. Mais il ne libère pas l'espace disque.

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 
} 


[email protected]:~# 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 

J'ai essayé de compacter le DB en utilisant

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

Il n'a pas aidé non plus.

Quelqu'un pourrait-il me faire savoir comment récupérer l'espace disque dans une telle situation? Je veux faire ceci dans le serveur de prod aussi vite que je peux.

+0

Lire Mojo réponse: https://stackoverflow.com/questions/5518581/mongodb-data-remove-reclaim-diskspace – Hackerman

Répondre

0

Vous devez effectuer la synchronisation initiale. Un secondaire à la fois et finalement descendre votre primaire et faire une synchronisation initiale sur cela aussi. Donc, vous arrêtez le secondaire puis supprimez tous les fichiers des noeuds dbPath. Démarrez le noeud et laissez-le effectuer la synchronisation initiale. Répétez cela pour tous les nœuds.

+0

Oui! Cela m'a aidé. J'ai fait la synchronisation initiale dans tous les trois ensembles de réplicas comme suggéré. Il a récupéré l'espace disque et il n'y avait pas de temps d'arrêt. Merci pour votre réponse! –