S3: Übung
Übung 1: RustFS einrichten und ausprobieren
Zugangsdaten konfigurieren
Bearbeite die Datei /home/user/.profile mit einem Texteditor wie beispielsweise nano:
Ergänze die Datei ganz unten um foglende Umgebungsvariablen:
Warning
In der Praxis sollte man sicherere Werte verwenden, wie z.B. die Ausgabe von openssl rand -base64 24.
Lies diese konfigurierten Umgegungsvariablen nun ein:
Überprüfe, ob die Umgebungsvariablen korrekt eingelesen worden sind:
Speichervolumen einrichten
Erstelle ein Verzeichnis innerhalb von deinem $HOME-Verzeichnis (/user/home) namens s3-data:
Server starten
Starte nun den Server mit folgendem Befehl:
Verwende für die Weiterarbeit ein zweites Terminal!
Auf Web-Interface einloggen
Besuche nun im Browser folgende URL, wobei du IP-ADRESSE durch die IP-Adresse deiner Cloud-VM ersetzte musst: http://IP-ADRESSE:9001.
Logge dich nun mit deinen Zugangsdaten ein (Account: user, Key: topsecret). Du solltest nun ein Web-Interface sehen.
Bucket erstellen
Erstelle nun einen Bucket namens pictures (siehe Schaltfläche + Create Bucket oben rechts) mit den Standardeinstellungen.
Dateien hochladen
Wähle den neu erstellen Bucket pictures nun aus. Lade einige Bilder hoch (siehe Schaltfläche Upload File/Folder).
Volume betrachten
Erstelle nun eine zweite SSH-Verbindung mit deiner VM.
Zeige den Inhalt deines S3-Volumes mit folgendem Befehl an:
RustFS speichert die Dateien als Verzeichnisse ab, zu denen Metadaten (xl.meta) abgelegt werden.
Die Daten im S3-Volume können also nicht direkt wie ein Dateisystem behandelt werden.
Übung 2: RustFS-Client verwenden
RustFS stellt einen Kommandozeilen-Client zur Verfügung, mit dem die Daten auf dem RustFS-Server komfortabel verwendet werden können.
Client-Alias erstellen
Der RustFS-Client rc kann so konfiguriert werden, dass er unter einem Alias-Namen mit einem bestimmten RustFS-Server zusammenarbeitet. Führe den folgenden Befehl aus, um einen neuen Alias namens local zu erstellen:
Unter dem Namen local kann man nun auf die lokale RustFS-Instanz zugreifen. Teste den Zugriff mit dem folgenden Befehl:
Es sollten nun Zustandsinformationen zum lokalen RustFS-Server angezeigt werden.
Die Konnektivität kann mithilfe des ping-Befehls überprüft werden:
Client-Befehle kennenlernen
Der RustFS-Client rc bietet zahlreiche Befehle, die man von Unix/Linux her kennt. Mit dem folgenden Befehl erhälst du eine Befehlsübersicht:
Mit den rc-Befehlen kann auf die Daten, die im S3 abgelegt sind, zugegriffen werden. Der Zugriff erfolgt, indem man den Pfad über Alias und Bucket ([Alias]/[Bucket]) angibt:
Mögliche Ausgabe (Beispiel):
Bucket via cc erstellen
Erstelle einen neuen Bucket namens backup mithilfe des rc bucket create-Befehls. (Tipp: Eine Hilfeseite erhält man mit rc bucket create --help.) Kopiere dann wieder drei unterschiedliche Dateien mit dem rc object copy-Befehl vom alten in den neuen Bucket.
Führe nun den Befehl rc object list local/backup aus, um zu kontrollieren, ob die Dateien in den neuen Bucket kopiert worden sind.
Kontrolliere anschliessend im Browser, ob der Bucket erstellt worden ist und alle Dateien enthält.
Buckets taggen
Verwende den rc tag-Befehl (genauer: den Unterbefehl rc tag set), um den Buckets die folgenden Tags zu vergeben:
| Bucket | Tag (Key) | Tag (Value) |
|---|---|---|
pictures | purpose | upload |
pictures | module | 346 |
backup | purpose | copy |
backup | module | 346 |
Mit rc tag --help bzw. rc tag set --help erhältst du Hilfestellungen dazu.
Liste nun die Tags mit rc tag list im JSON-Format auf.
Übung 3: s3cmd
Im Gegensatz zu rc ist der Befehl s3cmd nicht nur für die Zusammenarbeit mit RustFS ausgelegt, sondern sollte auch mit anderen S3-Implementierungen und -Angeboten zusammenspielen.
Der Befehl s3cmd sollte bereits installiert sein. Installiere ihn andernfalls mit dem folgenden Befehl:
Erstelle die Datei ~/.s3cfg und speichere darin die folgende Konfiguration ab:
Die letzte Angabe konfiguriert eine Region für den Storage. Dies funktioniert nur, wenn RustFS die gleiche Region konfiguriert hat. Erweitere hierzu /home/user/profile um eine Umgebungsvariable RUSTFS_REGION mit dem entsprechenden Wert und lies die Umgebungsvariablen erneut ein.
Liste nun die Dateien im pictures-RustFS-Bucket auf:
Mit s3cmd musst du anstelle des Alias local/ bloss das Protokoll s3:// als Präfix angeben.
Erstelle mit s3cmd mb nun einen neuen Bucket namens archive:
Kopiere die drei Dateien aus dem backup-Bucket in den archive-Bucket. Verwende dazu den s3cmd cp-Befehl.
Dokumentiere die Befehle in deiner persönlichen Dokumentation.
Kontrolliere nun im RustFS-GUI im Browser sowie mit den Befehlen rc object list und s3cmd ls, ob alle Dateien erfolgreich kopiert worden sind.
Übung 4: s3fs
FUSE (Filesystem in Userspace) bietet die Möglichkeit, Dateisysteme ohne Administratoren-Berechtigungen als Ordner einzubinden.
Mithilfe von s3fs können S3-Buckets als normale Ordner eingebunden werden.
Der Befehl s3fs sollte bereits installiert sein. Installiere ihn andernfalls mit dem folgenden Befehl:
Erstelle eine Konfigurationsdatei ~/.passwd-s3fs mit dem folgenden Inhalt:
Ändere die Berechtigungen für diese Datei folgendermassen:
Dadurch stellst du sicher, dass nur dein Benutzer diese Datei lesen und schreiben kann (s3fs verweigert sonst den Dienst).
Erstelle nun mit dem mkdir-Befehl ein Verzeichnis ~/s3-mount mit Unterverzeichnissen für die verschiedenen Buckets:
Mithilfe des s3fs-Befehls können die einzelnen Buckets nun “gemounted”, d.h. eingehängt werden:
Die Unterverzeichnisse von ~/s3-mount/ können nun weitgehend wie lokale Ordner verwendet werden.
Kopieren nun eine beliebige Datei (z.B. /usr/share/pixmaps/htop.png), die noch nicht in RustFS vorhanden ist, mit dem cp-Befehl in alle drei Buckets über das ~/s3-mount/-Verzeichnis.
Überprüfe nun im RustFS-GUI im Browser, ob du die Datei in jedem Bucket sehen kannst.
Führe nun den folgenden Befehl aus:
Damit wird demonstriert, dass s3fs die S3-Buckets über das Betriebssystem (d.h. über eine Kernel-Funktion) einhängt.
Mit dem umount-Befehl können die Buckets wieder vom Dateisystem gelöst werden:
Zwar gibt es hierfür auch den s3fs unmount-Befehl, es ist aber bemerkenswert, dass dies auch mit dem gewöhnlichen umount-Befehl funktioniert.
Mit tree kannst du nun überprüfen, dass keine Dateien mehr “da” sind, sondern nur noch die Verzeichnisse:
Ausgabe:
Die Dateien existieren aber weiterhin in RustFS, was du gerne über den Browser, per rc object list oder per s3cmd ls überprüfen kannst.