====== GlusterFS ======
===== Links =====
* https://www.admin-magazin.de/Das-Heft/2012/02/Das-verteilte-Dateisystem-GlusterFS-aufsetzen-und-verwalten
* [[https://www.admin-magazin.de/Das-Heft/2014/04/Die-verteilten-Speichersysteme-GlusterFS-und-Ceph-im-Vergleich/(offset)/16|Vergleich]]
===== Features =====
- asynchrone Replikation (Geo-Replikation), rsync über SSH. serieller Prozess und leidet an den von »rsync« bekannten Skalierungsproblemen, root-Zugriff im Zielsystem. Ab v3.5 soll das anders gelöst sein
- Seit Version 3.3 beherrscht GlusterFS Quorum-Mechanismen
- Eigenschaft eines Volumes werden über Translatoren abgewickelt
==== Erweiterbarkeit bei GlusterFS ====
- GlusterFS-Mitglied muss neues Mitglied kontaktieren
- **Replikation**: die **Anzahl der gewünschten Kopien** setzt man **per Volume** fest.
- **Einschränkungen**: "Die Anzahl der Bricks muss zum Setup des Volumes passen, insbesondere, wenn Replikation im Spiel ist. Bei einem Kopierfaktor von 3 erlaubt GlusterFS nur eine Erweiterung um »n« "Ziegelsteine", wenn »n« durch drei teilbar ist. Dies gilt auch beim Entfernen von Bricks."
Achtung: Volume replizierend und verteilt? -> Der Admin muss aufpassen, dass die Reihenfolge der Bricks stimmt. Sonst laufen Replikation und Verteilung kreuz und quer. Leider ist hier die Verwaltungsschnittstelle nicht sehr hilfreich. Ändert sich die Anzahl der Bricks, ändert sich auch die Partitionierung des Namensraums.
:!: wenn neue bricks hinzugekommen sind:
- Struktur des Volumes in den Konfigurationsdateien anpassen: ''gluster volume rebalance $volumeName fix-layout start''
- Daten migrieren: ''gluster volume rebalance $volumeName migrate-data start''
:!: **kein automatisches rebalancing** für vorhandene Dateien: Hier muss der Admin den Prozess »rebalance« anschieben:
* ''gluster volume rebalance $volumeName start''
* status rebalancing überwachen: ''gluster volume rebalance $volumeName status''
* stoppen (pausiert das rebalancing, "start" setzt fort): ''gluster volume rebalance $volumeName stop''
===== Begriffe =====
**Komponenten**:
* Datenpartitionen (volumes)
* Transportgruppen (transport groups)
* Übersetzer (translators) -> POSIX-Kompatibilität, Verteilung von Daten
* Transport-Protokoll: TCP oder RDMA (niedrigere Latenzen, muss aber vom Switch unterstützt werden)
**Bricks**:
* Grundregel: Anzahl der verwendeten Bricks müssen ein ganzzahliges Vielfaches des Replikationsfaktors sein
* block-devices (Partionen, disks, raids)
* bilden gemeinsamen Namensraum (Vertrauensstellung)
* Ausfall eines Bricks:
* für den Anwender transparent solange noch Redundanz besteht
* Reparatur automatisch möglich , anschließend integriert GlusterFS den Brick wieder und startet automatisch den Datenabgleich
* wenn nicht: händisch rauskonfigurieren. Deshalb auf Raid, red. Netzteile, NW-Karten achten
* bei NFS: Client hat keine Verbindung mehr, virtuelle IP empfohlen die schwenkt. in der kommerziellen Variante Cluster Trivial Data Base (CTDB)
* Austausch: ''gluster volume replace-brick $volumeName OLD.server:/data NEW.server:/ersatz start'' ("status" zeigt Fortschritt)
Metadaten bei GlusterFS
* keine Metadaten-Server
* Distributed Volumes -> über mehrere Bricks verteilt
* metadaten werden in den extended Attributen des back-end-Dateisystems abgelegt
* Zuweisung anhand eines Elastische Hash-Algorithmus (der sich aus Namen und Pfad berechnet)
**Objektorientierung bei GlusterFS**:
- bis einschließlich Version 3.2 war GlusterFS eine Datei-basierte Storage-Lösung
- v. 3.3. UFO – Unified File and Object (Store)
- Version 3.4 ersetzte dann UFO durch G4O (GlusterFS fo(u)r OpenStack) und brauchte eine verbesserte RESTful-API
**Zugriff**:
- native GlusterFS-Dateisystemtreiber (FUSE) kennt die Verteilung auf die Bricks
- Beim Zugriff über den eigenen NFS-Server (nur v3, TCP) regelt GlusterFS das intern
^ Betriebsmodi ^ Merkmale ^ Eignung ^ zu beachten ^
| Standalone Storage | ein einzelner Server, der das Dateisystem über das Netzwerk bereitstellt (ähnlich NFS) | | |
| Distributed Storage | mehrere Server, die die Daten untereinander verteilt speichern und diese den Clients bereitstellen | temporäre Daten ohne Ausfallsicherheit, da nur auf einem Server | |
| Replicated Storage | mehrere Server, die die Daten untereinander gespiegelt speichern und diese den Clients bereitstellen | wichtige Daten, Anzahl der Repliken einstellbar, mehrere Server | empfohlen: replica-Wert auf die Anzahl der Bricks zu setzen + verschiedene Server |
| Distributed Replicated Storage | mehrere Server, die die Daten untereinander verteilt und gespiegelt speichern | Kompromiss aus Datensicherheit und Geschwindigkeit | |
| Striped Storage | mehrere Server, bei welchen die Daten gestriped werden, um eine höhere Performance und Disk-IO-Bandbreite zu liefern | temporäre Daten (hohes Ausfallrisiko, entspricht etwa raid 0) | stripe-Wert sollte Anzahl der Bricks entsprechen + |
| Cloud/HPC Storage | siehe Distributed Replicated Storage | | |
| NFS-like Standalone Storage Server-2 | ähnlich Standalone Storage, es wird mehr als nur ein Dateisystem bereitgestellt | | |
| Aggregating Three Storage Servers with Unify | drei Server, die ein einheitliches Dateisystem mittels Unify bereitstellen, ohne Redundanz | | |
^Gruppenzugehörigkeit der Translatoren ^ ^
^ Gruppe ^ Funktion ^
| Storage | Bestimmt das Verhalten der Datenablage im Backend-Dateisystem |
| Debug | Schnittstelle zur Fehleranalyse und anderem Debugging |
| Cluster | Grundstruktur der Storage-Lösung, wie Replikation oder Verteilung von Daten |
| Encryption | Ver- und Entschlüsselung der gespeicherten Daten (noch nicht implementiert) |
| Protocol | Kommunikation und Authentisierung für Client-Server und Server-Server |
| Performance | Tuning-Parameter |
| Bindings | Erweiterung zu anderen Sprachen, beispielsweise Python |
| Features | Weitere Eigenschaften wie Locks oder Quotas |
| Scheduler | Verteilung von neuen Schreiboperationen im GlusterFS-Verbund |
| System | Schnittstelle zum System, insbesondere der Dateisystem-Zugriffskontrolle |
===== Installation =====
^ Paket ^
| glusterfs-client | clustered file-system (client package) |
| glusterfs-client-dbgsym | Debug symbols for glusterfs-client |
| glusterfs-common | GlusterFS common libraries and translator modules |
| glusterfs-common-dbgsym | Debug symbols for glusterfs-common |
| glusterfs-server | clustered file-system (server package) |
| glusterfs-server-dbgsym | debug symbols for glusterfs-server |
===== Konfiguration =====
==== Firewalling/Ports ====
* TCP+UDP-Port: 111 Portmapper
* TCP 24007 – Gluster Daemon
* TCP 24008 – Management
* TCP 49152 plus folgende (GlusterFS vor Version 3.4: 24009) - aufsteigend je Brick einen Port
* optional: Gluster NFS service: 38465 - 38467
==== Volume einrichten ====
sudo apt install glusterfs-server
# debian9:
systemctl enable glusterfs-server.service
systemctl start glusterfs-server.service
# promox 6.4x / debian10
systemctl enable glusterd.service
systemctl start glusterd.service
=== Cluster zusammensetzen ===
# auf node1
gluster peer probe node2.domain.tld
gluster peer probe node3.domain.tld
Staus: gluster peer status
# by-id, by-uuid, by-partlabel, ...
mkfs.xfs /dev/disk/by-partlabel/glusterlabel
# mount-point erstellen:
mkdir -p /mnt/gluster-brick1
Datenverzeichnis erzeugen (NACH mount!): mkdir /mnt/gluster-brick1/data
Volume erzeugen (hier je 1 brick auf 3 nodes)
gluster volume create volumeName replica 3 transport tcp node1.domain.tld:/mnt/gluster-brick1/data node2.domain.tld:/mnt/gluster-brick2/data node3.domain.tld:/mnt/gluster-brick3/data
gluster volume start volumeName
=== manuell mounten ===
# on nodes:
mount -t glusterfs node1.domain.tld:/volumeName /local/mountpoint
in /etc/fstab:
node1.domain.tld:/volumeName /local/mountpoint glusterfs defaults,_netdev 0 0
https://stanislas.blog/2018/10/how-to-mount-local-glusterfs-volume-boot-fstab-systemd-fix/
!!! warned: the file must be named exactly for its target mount point. mounted at /mnt/backups -> /etc/systemd/system/mnt-backups.mount.d
mkdir /etc/systemd/system/gluster-volumeName.mount.d
/etc/systemd/system/gluster-volumeName.mount.d/override.conf
[Unit]
After=glusterfs-server.service
Wants=glusterfs-server.service