class: center, middle  # GlusterFS ###Verteiltes "RAID-artiges" Netzwerkdateisystem ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Verteilt gern Daten :-) --- ### Was ist GlusterFS?  **
GlusterFS
** ist ein **Netzwerkdateisystem**, das aus einem einzelnen Knoten oder mehrere Server-Knoten (Bricks) besteht. Hierbei kann der **Datenbestand sowohl gespiegelt** als auch über mehrere Bricks **verteilt** werden. Dies ist ähnlich wie bei den verschiedenen RAID-Leveln. Die Verbindung zwischen den Bricks geschieht über **TCP** oder **Infiniband**, kann aber auch über **
SSL
** abgesichert werden. **Aus Clientsicht** wird eine GlusterFS-Freigabe beim Mounten als einheitliches Dateisystem präsentiert. --- ###
C
Glusterbau  Im Beispiel besteht unser Cluster aus **zwei Bricks/Knoten**, die die Daten gespiegelt speichern sollen und **einem Nutzer/Client**, der darauf zugreift. Die **Variablen** setzen wir **temporär** nach dem Anmelden als root auf ***allen Systemen***: ```bash # IP/Hostname Knoten 1 GFSBrick1i='192.168.178.151' GFSBrick1h='GFSBrick1' # IP/Hostname Knoten 2 GFSBrick2i='192.168.178.152' GFSBrick2h='GFSBrick2' # IP/Hostname Client GCi='192.168.178.153' GCh='GFSClient' ``` --- ### Hostnamen statt IPs  Wenn Ihr statt der IP-Adressen lieber mit Hostnamen arbeitet und keinen DNS-Server betreibt, könnt Ihr auf ***allen Systemen*** die IP-Hostname-Paare in der */etc/hosts* eintragen mit: ```bash echo "# GlusterFS Servers + Client $GFSBrick1i $GFSBrick1h $GFSBrick2i $GFSBrick2h $GCi $GCh " >> /etc/hosts ``` --- ### GlusterFS: Serversoftware  Auf **allen Bricks** installieren und starten wir den Serverteil der Software und legen ein Verzeichnis zum Aufnehmen der abzugleichenden Daten an: ```bash # Pakete mit Abhängigkeiten installieren apt install glusterfs-server -y # Daemon starten und Autostart aktivieren systemctl start glusterd systemctl enable glusterd # Datenverzeichnis anlegen mkdir -p /gfs ``` --- ### Bricks miteinander bekanntmachen  Auf **einem Brick** fügen wir die anderen Bricks hinzu, um daraus das verteilte Dateisystem zu bauen. ```bash # Anderen Knoten authentifizieren # und hinzufügen gluster peer probe "$GFSBrick2h" # Verbindungsstatus abfragen gluster peer status # Woraus besteht der Pool? gluster pool list ``` --- ### GlusterFS-Volume anlegen  Erst mit einem Volume kann ein GlusterFS zum Speichern von Daten verwendet werden, die wird angelegt mit: ```bash # Neues Volume zum Speichern von Daten erstellen gluster volume create vol01 replica 2 transport tcp\ $GFSBrick1h:/gfs $GFSBrick2h:/gfs force ``` * **vol01:** Name des zu erstellenden Volumes * **replica 2:** Identische Kopien auf beiden Bricks * **transport tcp:** TCP für Datenübertragung * **$GFSBrick ... /gfs:** Speicherorte auf den jeweiligen Servern * **force:** (Optional) Anlegen erzwingen, z.B. wenn mehrere Bricks auf selben Server --- ### GlusterFS-Volume aktivieren  Das erstelle Volume müssen wir nun noch aktivieren und dabei lassen wir uns auch gleich noch Informationen ausgeben: ```bash gluster volume start vol01 gluster volume info vol01 ``` --- ### GlusterFS mounten  Ein GlusterFS kann – wie andere Netzwerkdateisysteme auch – gemountet werden. ```bash # Mountpunkt anlegen mkdir -p /mnt/gfs # Clientsoftware installieren apt install glusterfs-client -y # Temporär mounten mount -t glusterfs "$GFSBrick1h":/vol01 /mnt/gfs # Wieviel ist noch frei? df -h /mnt/gfs # fstab-Eintrag für automatisches Einhängen echo "$GFSBrick1h:/vol01 /mnt/gfs glusterfs\ defaults,_netdev 0 0" >> /etc/fstab ``` --- ### Anmerkungen für Proxmox  * Für Bricks können **priviligierte Container** (LXC) genutzt werden * Für den Client ist eine VM nötig, da Proxmox nicht das nötige fuse-Modul mitbringt, was für die Clientsoftware benötigt wird. --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de