GlusterFS ist ein verteiltes Dateisystem für skalierbare Speicherlösungen. Es ermöglicht das Pooling von Storage über mehrere Server hinweg.
Installation
# Debian/Ubuntu
apt install glusterfs-server glusterfs-client
# RHEL/CentOS
dnf install glusterfs-server glusterfs-client
# Starten
systemctl enable glusterd
systemctl start glusterd
Cluster einrichten
Nodes verbinden
# Auf Node 1 (gluster1)
gluster peer probe gluster2
gluster peer probe gluster3
# Status prüfen
gluster peer status
# Pool-Liste
gluster pool list
Firewall
# Ports öffnen
firewall-cmd --permanent --add-service=glusterfs
firewall-cmd --permanent --add-port=24007-24008/tcp
firewall-cmd --permanent --add-port=49152-49251/tcp
firewall-cmd --reload
# UFW
ufw allow from 192.168.1.0/24 to any port 24007:24008 proto tcp
ufw allow from 192.168.1.0/24 to any port 49152:49251 proto tcp
Volume-Typen
Distributed (Standard)
# Daten verteilt ohne Redundanz
gluster volume create dist-vol \
gluster1:/data/brick1 \
gluster2:/data/brick2 \
gluster3:/data/brick3
gluster volume start dist-vol
Replicated
# Gespiegelte Daten (RAID 1-artig)
gluster volume create repl-vol replica 3 \
gluster1:/data/brick1 \
gluster2:/data/brick1 \
gluster3:/data/brick1
gluster volume start repl-vol
Distributed-Replicated
# Verteilt + Repliziert (für große Cluster)
gluster volume create dist-repl-vol replica 2 \
gluster1:/data/brick1 \
gluster2:/data/brick1 \
gluster3:/data/brick1 \
gluster4:/data/brick1
gluster volume start dist-repl-vol
Dispersed (Erasure Coding)
# Ähnlich RAID 5/6
gluster volume create disp-vol disperse 3 redundancy 1 \
gluster1:/data/brick1 \
gluster2:/data/brick1 \
gluster3:/data/brick1
gluster volume start disp-vol
Volume verwalten
Status anzeigen
# Volume-Info
gluster volume info
# Bestimmtes Volume
gluster volume info vol-name
# Status
gluster volume status vol-name
# Detailliert
gluster volume status vol-name detail
Volume erweitern
# Bricks hinzufügen (Distributed)
gluster volume add-brick vol-name \
gluster4:/data/brick1
# Bei Replica: Muss Vielfaches sein
gluster volume add-brick repl-vol replica 3 \
gluster4:/data/brick1 \
gluster5:/data/brick1 \
gluster6:/data/brick1
Volume verkleinern
# Brick entfernen
gluster volume remove-brick vol-name \
gluster3:/data/brick1 start
# Status prüfen
gluster volume remove-brick vol-name \
gluster3:/data/brick1 status
# Abschließen
gluster volume remove-brick vol-name \
gluster3:/data/brick1 commit
Volume stoppen/löschen
# Stoppen
gluster volume stop vol-name
# Löschen
gluster volume delete vol-name
Client-Zugriff
Native Client (FUSE)
# Mounten
mount -t glusterfs gluster1:/vol-name /mnt/gluster
# In /etc/fstab
gluster1:/vol-name /mnt/gluster glusterfs defaults,_netdev 0 0
# Mit Backup-Server
gluster1,gluster2:/vol-name /mnt/gluster glusterfs defaults,_netdev,backupvolfile-server=gluster2 0 0
NFS (v3)
# NFS aktivieren
gluster volume set vol-name nfs.disable off
# Mounten
mount -t nfs -o vers=3 gluster1:/vol-name /mnt/gluster
Optionen und Tuning
Häufige Optionen
# Performance
gluster volume set vol-name performance.cache-size 256MB
gluster volume set vol-name performance.io-thread-count 32
# Netzwerk
gluster volume set vol-name network.ping-timeout 10
# Sicherheit
gluster volume set vol-name auth.allow 192.168.1.*
# Quorum (für Replica)
gluster volume set vol-name cluster.quorum-type auto
Optionen anzeigen
# Alle Optionen
gluster volume get vol-name all
# Bestimmte Option
gluster volume get vol-name performance.cache-size
Option zurücksetzen
gluster volume reset vol-name performance.cache-size
Self-Heal
Status prüfen
# Heal-Info
gluster volume heal vol-name info
# Nur problematische Dateien
gluster volume heal vol-name info heal-failed
# Split-Brain
gluster volume heal vol-name info split-brain
Heal starten
# Full Heal
gluster volume heal vol-name full
# Bestimmter Brick
gluster volume heal vol-name brick gluster1:/data/brick1
Geo-Replikation
Einrichten
# SSH-Keys austauschen
gluster system:: execute gsec_create
gluster volume geo-replication vol-name gluster-dr::dr-vol create push-pem
# Starten
gluster volume geo-replication vol-name gluster-dr::dr-vol start
Status
gluster volume geo-replication vol-name gluster-dr::dr-vol status
Snapshots
Snapshot erstellen
# Snapshot
gluster snapshot create snap1 vol-name
# Mit Beschreibung
gluster snapshot create snap1 vol-name description "Vor Update"
Snapshots verwalten
# Auflisten
gluster snapshot list vol-name
# Info
gluster snapshot info snap1
# Wiederherstellen
gluster snapshot restore snap1
# Löschen
gluster snapshot delete snap1
Monitoring
Statistiken
# Volume-Profile aktivieren
gluster volume profile vol-name start
# Statistiken anzeigen
gluster volume profile vol-name info
# Deaktivieren
gluster volume profile vol-name stop
Top-Statistiken
# Read/Write
gluster volume top vol-name read-perf
# Open-Aufrufe
gluster volume top vol-name open
Troubleshooting
Brick offline
# Status prüfen
gluster volume status vol-name
# Brick prüfen
ls -la /data/brick1/.glusterfs
# Glusterd neustarten
systemctl restart glusterd
Split-Brain
# Split-Brain erkennen
gluster volume heal vol-name info split-brain
# Auflösen (größere Datei behalten)
gluster volume heal vol-name split-brain bigger-file /path/to/file
# Oder von bestimmtem Brick
gluster volume heal vol-name split-brain source-brick gluster1:/data/brick1 /path/to/file
Verbindungsprobleme
# Peer-Status
gluster peer status
# Logs prüfen
tail -f /var/log/glusterfs/glusterd.log
# TCP-Verbindungen
ss -tn | grep 24007
Praktisches Beispiel
Hochverfügbarer Web-Storage
# Auf allen 3 Nodes
mkdir -p /data/brick1
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /data/brick1
# Cluster bilden (auf Node 1)
gluster peer probe gluster2
gluster peer probe gluster3
# Repliziertes Volume
gluster volume create web-data replica 3 \
gluster1:/data/brick1/web \
gluster2:/data/brick1/web \
gluster3:/data/brick1/web
gluster volume start web-data
# Optionen setzen
gluster volume set web-data auth.allow 192.168.1.*
gluster volume set web-data performance.cache-size 256MB
# Auf Web-Servern mounten
mount -t glusterfs gluster1:/web-data /var/www/html
Status-Script
#!/bin/bash
# gluster-status.sh
echo "=== Cluster Status ==="
gluster peer status
echo ""
echo "=== Volume Status ==="
gluster volume status all
echo ""
echo "=== Heal Status ==="
for vol in $(gluster volume list); do
echo "--- $vol ---"
gluster volume heal $vol info summary
done
Zusammenfassung
| Volume-Typ | Beschreibung | Min. Bricks |
|---|
| Distributed | Verteilt ohne Redundanz | 1 |
| Replicated | Gespiegelt | 2 |
| Dispersed | Erasure Coding | 3 |
| Dist-Repl | Verteilt + Gespiegelt | 4 |
| Befehl | Funktion |
|---|
| gluster peer probe | Node hinzufügen |
| gluster volume create | Volume erstellen |
| gluster volume info | Volume-Info |
| gluster volume heal | Self-Heal |
| Port | Dienst |
|---|
| 24007 | glusterd |
| 24008 | Management |
| 49152+ | Brick-Ports |
Fazit
GlusterFS bietet flexible verteilte Speicherlösungen. Replizierte Volumes sorgen für Ausfallsicherheit. Dispersed Volumes bieten Speichereffizienz. Self-Heal repariert inkonsistente Daten automatisch. Für sehr große Cluster oder S3-Zugriff ist Ceph oft besser geeignet.