2017-08-18 3 views
0

Ich verwende Open edX, die MongoDB verwendet, um Kurse zu speichern. Wir führen ein Replikatset mit drei Knoten aus. Es verwendet derzeit Split-Mongo - eine Funktion, die eine Kopie des aktuellen Dokuments (Backup) vor der Bearbeitung erstellt. Im Laufe der Zeit stapelt sich dies, was zu einem großen Speicherplatzverbrauch führt. Momentan gibt es ungefähr 30 Kurse und wenn ich es exportiert, verbraucht es ungefähr 2-3 GB. Es ist jedoch der Speicherplatz tatsächlich verwendet wirdOpen edX und Split Mongo verbraucht Speicherplatz

Ich habe versucht, die unerwünschten Kurse zu reinigen this script mit

Darauf in primären Mitglied ausgeführt wird, dauert es einige Zeit und löscht alle unerwünschten Dokumente. Aber es gibt den Speicherplatz nicht frei.

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 

Ich versuchte, die DB zu verdichten

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

Es verwendet hat auch nicht geholfen.

Könnte mir bitte jemand sagen, wie man den Speicherplatz in einer solchen Situation zurückgewinnen kann? Ich möchte das so schnell wie möglich im Prod Server machen.

+0

Mojo Antwort lesen: https://stackoverflow.com/questions/5518581/mongodb-dat-remove-reclaim-diskspace – Hackerman

Antwort

0

Sie müssen die erste Synchronisierung durchführen. Eine sekundäre zu der Zeit und schließlich hinunter Ihre primäre und eine erste Synchronisierung auf diese auch.

So beenden Sie sekundäre und entfernen Sie dann alle Dateien von Knoten dbPath. Starten Sie den Knoten und lassen Sie ihn die anfängliche Synchronisierung durchführen. Wiederholen Sie dies für alle Knoten.

+0

Ja! Es hat mir geholfen. Ich habe die erste Synchronisierung in allen drei Replikatsätzen wie vorgeschlagen durchgeführt. Es hat den Speicherplatz beansprucht und es gab keine Ausfallzeit. Danke für deine Antwort! –

Verwandte Themen