Zuletzt aktualisiert am 3. Oktober 2021.
Oder: Die Datenbank eines Storagenodes auf ein anderes Laufwerk verschieben
In diesem Artikel zeige ich dir, wie du die Datenbank(en) deiner Storagenodes verschieben kannst, um die IO-Auslastung deiner Datenfestplatten zu senken.
Wieso sollte man das tun?
Storj-Storagenodes arbeiten jeweils als eigene Instanzen, egal ob sie über Docker oder ein Binary eines jeweiligen Betriebssystems ausgeführt werden.
Jeder Node hat damit seine eigenen Datenbanken, in denen die Auslastung des Nodes, die Kontrakte/Transaktionen sowie die Vergütung gespeichert werden.
Bei diesen Datenbanken handelt es sich um SQLite-Datenbanken. Also Datenbanken, die als Files auf dem Speicher liegen.
Wenn hier nun viele Lese/Schreibvorgänge passieren, schnellt schnell die IO-Auslastung herkömmlicher Festplatten in die Höhe.
Besonders bei Updates der Storagenodes kann das passieren – oder natürlich wenn außer den Storagenodes noch IO/-lastiger Kram auf dem Server läuft 😉
Besonders bei der Verwendung von SMR-Drives kann es Probleme geben. Diese Festplatten schreiben die Daten auf leicht überlappende Datenspuren auf der Festplatte. Das hat zur Folge, dass bei jedem neuen Schreibvorgang auf die davor und dahinter gespeicehrten Daten neu geschrieben werden müssen. Das sorgt vor allem bei einem hohen Füllstand der Festplatte (wie z.B. bei vollen Nodes) dafür, dass die HDD massiv ausgelastet ist.
Das Ergebnis dieser Überlastung sind langsame Storagenodes und im schlimmsten Fall korrupte Datenbankfiles, die ein Starten des Nodes verhindern können und/oder zu Einnahmeverlusten führen können.
Es ist daher – besonders, wenn mehrere Storagenodes betrieben werden, oder es bereits zu Problemen gekommen ist – sinnvoll, die Datenbanken auf ein schnelles Laufwerk, z.B. ein SSD-Volume auszulagern.
So gehts!
Gesamtzeit: 10 Minuten
1) Verzeichnis auf neuem Laufwerk für die Datenbank(en) erstellen und Datenbankfiles kopieren
Zuerst erstellen wir auf unserem schnelleren Laufwerk, z.B. ein SSD-Volume, ein Verzeichnis, in dem wir alle Datenbank-Files sammeln (z.B. “Storj_Databases_Logs”). In diesem Verzeichnis erstellen wir für jeden unserer Storagenodes ein eigenes Verzeichnis.
Jetzt stoppen wir unsere Storagenodes und kopieren im Anschluss die Datenbankfiles in das neue Verzeichnis des jeweiligen Nodes.
Kopiert werden sollten die folgenden Files:
-> heldamount.db
-> info.db
-> notifications.db
-> orders.db
-> pieceinfo.db
-> pricing.db
-> secret.db
-> used_serial.db
-> satellites.db
-> storage_usage.db
-> reputation.db
-> piece_spaced_used.db
-> piece_expiration.db
-> bandwith.db
2) Docker-Compose-File anpassen
Jetzt müssen wir noch dafür sorgen, dass das Verzeichnis mit den Datenbankfiles des jeweiligen Nodes auch in den Docker-Container des Nodes gemountet wird.
Das machen wir, indem wir folgendes in der docker-compose.yml ergänzen:
type: bind
source: /volume1/Storj_Databases_Logs/storj-databases/node3
target: /app/ssddatabase
3) Config des Storagenodes anpassen
Damit der Storagenode nun auch die Datenbankfiles in der neuen Location nutzt, müssen wir die das Configfile (config.yaml) des Nodes anpassen.
Dieses finden wir im Pfad “data/config.yaml”.
Wir öffnen das File und ergänzen einfach ganz oben den folgenden Eintrag “Storage2.Database-Dir: /app/ssddatabase”.
Achtung: Diese Anpassung muss in jedem Config-File für den jeweiligen Node einzeln eingetragen werden.
4) Fertig
Jetzt den Docker-Container des Nodes neu starten. Fertig, der Node nutzt nun die Datenbankfiles in der neuen Location.
Tipp: Um zu überprüfen, ob der Node auch wirklich die neuen Files bzw. die neue Location nutzt, kannst du dir nach einer Weile die Timestamps der letzten Bearbeitung der Files anschauen.
Tipp: Wenn sich einmal ein Tippfehler oder so eingeschlichen hat, kann es sein, dass der Node nicht startet.
In diesem Fall empfiehlt es sich imemr, das Looging anzustellen:
# Logging
log.output: "/app/logs/storagenode3.log"
# the minimum log level to log
log.level: info
Mirko
Hallo Jan-Dirk,
du hast in diesem Artikel mal wieder alles super einfach beschrieben. Ich vermisse für die Umsetzung jetzt allerdings noch die fehlenden Infos unter Punkt 1.) “Kopiert werden sollten die folgenden Files: – “, wie viele u. welche Files genau ich dafür verschieben muss.
Wäre super, wenn du diese Info in deinem Artikel noch nachreichen könntest.
Danke dir.
Grüße
Mirko
Jan-Dirk
Hallo Mirko,
Tatsache, da ist mir tatsächlich ein Fehler unterlaufen, sorry 😉
Ich habe die Files nun ergänzt.
Wenn noch Fragen oder Probleme auftauchen, gerne einfach fragen 😉
Beste Grüße
Jan-Dirk