software:glusterfs

GlusterFS

  1. 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
  2. Seit Version 3.3 beherrscht GlusterFS Quorum-Mechanismen
  3. Eigenschaft eines Volumes werden über Translatoren abgewickelt
  1. GlusterFS-Mitglied muss neues Mitglied kontaktieren
  2. Replikation: die Anzahl der gewünschten Kopien setzt man per Volume fest.
  3. 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:

  1. Struktur des Volumes in den Konfigurationsdateien anpassen: gluster volume rebalance $volumeName fix-layout start
  2. 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

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:

  1. bis einschließlich Version 3.2 war GlusterFS eine Datei-basierte Storage-Lösung
  2. v. 3.3. UFO – Unified File and Object (Store)
  3. 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
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
  • 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
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