GlusterFS
GlusterFS ist ein netzwerkbasiertes, skalierbares Dateisystem. Es findet u. a. in den Bereichen Cloud Computing, Streaming Media Services und Content Delivery Networks Anwendung. GlusterFS wurde ursprünglich von Gluster Inc. und anschliessend von Red Hat entwickelt, nachdem Red Hat 2011 Gluster übernommen hatte.
Strengenommen ist Gluster kein eigenes Dateisystem wie beispielsweise FS: XFS, sondern nutzt vorhandene Dateisysteme und bietet diese über Rechnergrenzen verteilt als „Volumes“ an. Daher wird Gluster als verteiltes Dateisystem kategorisiert.
Im Juni 2012 wurde Red Hat Storage Server als kommerziell unterstützte Variante von GlusterFS angekündigt. Red Hat kaufte im April 2014 Inktank Storage, das Unternehmen hinter dem verteilten Dateisystem Ceph, und benannte den auf GlusterFS basierenden Red Hat Storage Server in „Red Hat Gluster Storage“ um.
Vorüberlegungen
Das OS auf separater/separaten Disks installieren.
- Frage klären: Deploy der Data-Volumes auf einer Disk, einer Disk-Partition oder einem LVM?Disk, wenn diese per UUID in
/etc/fstab
eingebunden wird.LVM macht wegen Benennung in/etc/fstab
keine Probleme, wenn eine Disk ersetzt wird. LVM auch dann nehmen, wenn Snapshots in GlusterFS benötigt werden.
Installation
Folgende Schritte auf jedem teilnehmenden (RHEL-)Host durchführen.
Mit DNS (inkl. Reverse) und NTP arbeiten.
/etc/hosts
korrekt setzen.Firewall-Regeln setzen:
Port 24007/tcp für glusterd
Pro Brick einen TCP-Port
Für aktuelle Versionen anschliessend:
dnf -y install epel-release
# Activate Repo
dnf -y install centos-release-gluster
# for Rocky and others: http://mirror.centos.org/centos-8/8/storage/x86_64/gluster-10/
dnf -y --enablerepo=powertools install glusterfs-server
systemctl enable --now glusterd
Storage-Pool aufsetzen
Pool aktivieren (auf Node gluster01
ausführen):
gluster peer probe gluster02
gluster peer probe gluster03
Bricks konfigurieren (auf jedem Node):
mkfs.xfs -i size=512 /dev/vdb
mkdir -p /bricks/brick01
/dev/vdb /bricks/brick01 xfs defaults 0 0
Bemerkung
Natürlich ist ein Eintrag, der mit UUIDs arbeitet, besser. Auch ein LVM (eins pro Brick) wäre besser. Will man Snapshotting-Funktionalität, muss jeder Brick ein Thin provisioned, unabhängiges LVM sein.
mount --all
mkdir /bricks/brick01/vol01
Volume bauen (auf einem Node):
gluster volume create vol01 replica 3 gluster01:/bricks/brick01/vol01 gluster02:/bricks/brick01/vol01 gluster03:/bricks/brick01/vol01
gluster volume start vol01
gluster volume info
Überwachung
gluster peer status
# der Peer, auf dem das ausgeführt wird, wird dabei nicht angezeigt
gluster volume info
gluster volume status
gluster volume status $VOLNAME clients
gluster volume heal $VOLNAME info
Maintenance-Script
Shutdown/Stop all Gluster Nodes:
cd /usr/sbin
wget https://raw.githubusercontent.com/gluster/glusterfs/master/extras/stop-all-gluster-processes.sh
chmod +x stop-all-gluster-processes.sh
/usr/sbin/stop-all-gluster-processes.sh -h
Wird das Skript real mit dem Parameter -g
für einen „Graceful Shutdown“ aufgerufen, und es erscheint keine Ausgabe wie:
sending SIGTERM to mount process with pid: 11573
sending SIGTERM to pid: 9231
sending SIGTERM to pid: 9225
sending SIGTERM to pid: 9187
sending SIGTERM to pid: 9181
sending SIGTERM to pid: 13399
… dann hat das Script keine Gluster-Prozesse gestoppt. Grund ist möglicherweise ein laufender Healing-Prozesss.
Volume-Typen
http://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/
Distributed: nur verteilt, keine Redundanz
Replicated: verteilt plus Replikation = Hochverfügbarkeit
Striped
Distributed Striped
Distributed Replicated
Distributed Striped Replicated
Striped Replicated
Dispersed (interessant, 5 Bricks)
Distributed Dispersed
Troubleshooting
gluster volume heal $VOLNAME
liefertLaunching heal operation to perform index self heal on volume $VOLNAME has been unsuccessful: Quorum not met. Volume operation not allowed.
Wurden in einem n-Node-Setup (n > 2) die Hosts neu gestartet? Dann auf jedem Host
systemctl restart glusterd
in 30 Sekunden-Abstand ausführen. Anschliessendgluster volume heal $VOLUME
starten.Geht immer noch nicht? Dann lokale Host-Firewall auf Aktivität prüfen, vielleicht blockt sie Netzwerkverkehr.
- VMs im oVirt laufen ohne Probleme, aber Gluster meldet mal „Shards out of sync“, und dann mal wieder alles ok - bis zum nächsten Mal?
Ein Poweroff der betroffenen VMs tut Gluster gut, um I/O zu reduzieren und Gluster Zeit zum Sync zu geben, aber welche VMs müssen abgeschaltet werden?
Lässt sich beispielsweise so herausfinden:
Shard-Meldung anschauen:
Brick gluster:/.../e3596fa3-e9d4-.../images/ac21a5ab-873c-46cb-.../f47f8223-fce2-4c19-...
Der entscheidende Tipp: Die GUID nach
images/
ist die GUID der Disk der VM in oVirt.Also beispielsweise im oVirt-GUI unter Storage > Disks nach obiger
ac21a5ab
suchen. Damit wird die passende VM gefunden.VM herunterfahren, Gluster Healing anstossen, VM hochfahren.
- Healing für Gluster-Volume angestossen, es erholt sich aber nicht, das Healing läuft endlos? Tipp 1:
Alle VMs in oVirt runtergefahren, und es besser sich nicht? Taucht das hier auf?:
/e80eabe4-ced2-44e7-9ad1-cd48320b8a18/dom_md/ids /__DIRECT_IO_TEST__ Status: Connected Number of entries: 2
Dann ist ohne die GUID nachzuschauen die laufende oVirt-Engine schuld. Was hilft, statt auch noch die oVirt-Engine herunterzufahren: Storage Domain in Maintenance Mode schicken.
alle VMs auf dem betroffenen Volume herunterfahren
Compute > Data Centers > Datacenter auswählen > Storage auswählen > Maintenance
Healing anstossen und abwarten
Compute > Data Centers > Datacenter auswählen > Storage auswählen > Aktivieren
- Healing für Gluster-Volume angestossen, es erholt sich aber nicht, das Healing läuft endlos? Tipp 1:
Nachschauen, welche Clients auf das Volume zugreifen:
systemctl status glusterd gluster volume status $VOLNAME clients
Log des Clients anschauen:
less /var/log/glusterfs/$MOUNTPOINT.log
Am Ende half der Reboot jedes einzelnen Gluster-Members, und nach dem Reboot ein einzelnes
systemctl restart glusterd
.
GlusterFS Cheat Sheet
gluster peer detach $PEER
gluster peer probe $PEER
gluster peer status
gluster peer probe $PEER
gluster volume create $VOLNAME replica $REPL $PEER:/path/to/brick ...
gluster volume delete $VOLNAME
gluster volume get all
gluster volume heal $VOLNAME
gluster volume heal $VOLNAME gluster volume heal data info
gluster volume heal $VOLNAME info
gluster volume heal $VOLNAME split-brain bigger-file
gluster volume heal info
gluster volume info
gluster volume rebalance $VOLNAME start
gluster volume rebalance $VOLNAME status
gluster volume replace-brick $VOLNAME $PEER:/path/to/brick
gluster volume set $VOLNAME $KEY $VALUE
gluster volume start $VOLNAME
gluster volume status
gluster volume status $VOLNAME clients
gluster volume stop $VOLNAME
gluster volume tier $VOLNAME start
gluster volume tier $VOLNAME start force
gluster volume tier $VOLNAME status
gluster volume tier $VOLNAME stop
Built on 2024-11-18