Ein Blog über Code, Hardware und Co

Storj

Storj-Database verschieben

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

  1. 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

Schreibe eine Antwort