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.