GlusterFS, ein verteiltes Dateisystem

GlusterFS ist ein verteiltes Dateisystem, das Speicherelemente von mehreren Servern als einheitliches Dateisystem präsentiert und eignet sich besonders gut als Festplattenspeicher für hochverfügbare Systeme.

Im Artikel "Cluster HA 3 Knoten" wurde beschrieben, wie man einen Cluster auf Proxmox VE aufsetzt. Als Storage wurde für die virtuellen Festplatten Netzspeiche SMB/CIFS ausgewählt.

Es gibt auch die Möglichkeit auf den Proxmox VE Servern ein verteiltes Dateisystem namens Gluster FS zu konfigurieren. Hier muss auf jedem Server entsprechend viel Festplattenspeicher zur Verfügung stehen, möglichst gleiche Kapazität auf allen Servern. Sollten wir mehrere physische Festplatten in einem Server haben, können wir eine große logische Festplatte mit LV erstellen. Das machen wir auf allen 3 Servern.

Ich gehe davon aus, dass wir auf allen 3 Servern jeweils eine Volume Group vg1 und eine Logical Volums lv1 haben. Die lv1 ist mit ext4 formatiert.

Punkt
Ein Ordner mit dem Namen /data wird auf allen 3 Servern erstellt.

 

# mkdir /data
Punkt
Die Datei /etc/fstab wird geöffnet und entsprechender Eintrag gemacht, damit die Festplatte beim Start gemountet wird. Auf allen 3 Servern.

 

/dev/vg1/lv1 /data ext4 defaults 0 0

 

Punkt
Wir können sofort mounten

 

# mount -a
Punkt
Wenn die Partition gemountet ist müssen wir noch unter /data ein Ordner namens Brick erstellen, so wie unten.

 

root@pve1:~# mkdir /data/brick1
root@pve2:~# mkdir /data/brick2
root@pve3:~# mkdir /data/brick3
Punkt
Namen der Server in DNS bitte eintragen. Sollte kein DNS-Server vorhanden sein oder kein Eintrag in DNS erwünscht, dann bitte die Namen in der /etc/hosts Datei eintragen. Die Einträge macht man auf jedem Server in der /etc/hosts Datei.
Punkt
Alle 3 Server sollten miteinander connecten. Das erreichen wir mit dem Befehl
gluster peer probe <Servername oder IP>.
Sollten die Server mit mindestens 2 Netzwerkarten ausgestattet sein, dann können wir ein Netz nur für den Gluster konfigurieren. In so einem Fall nutzen wir die IP-Adresse statt die Namen der Server. In unserem Fall haben wir nur ein Netz.
Punkt
Wir befinden sich auf dem ersten Server und erstellen eine Verbindung mit den anderen Servern. Als Ergebnis solte wir peer probe: success bekommen

 

root@pve1:/# gluster peer probe pve2
root@pve1:/# gluster peer probe pve3
Punkt
Status auf alle 3 Server kann man mit dem folgenden Befehl überprüfen. Es sollten die beiden andere Servernamen angezeigt werden.

 

# gluster peer status
Punkt
Ein volume wird erstellt, mit dem Namen vol1. Nur auf einem Server braucht man den Befehl auszuführen. Die Daten werden auf andere Server repliziert.

 

# gluster volume create vol1 replica 3 transport tcp pve1:/data/brick1 pve2:/data/brick2 pve3:/data/brick3 force
Punkt
Das volume vol1 wird gestartet. Diesen Befehl können wir auf beliebigem Gluster Server ausführen, auf pve1, pve2 oder pve3

 

# gluster volume start vol1 force
Punkt
Sicherheit bei Glusters. Normalerweise jeder im Netz kann auf das volume vol1 zugreifen. Will man das begrenzen, muss das Erlauben für bestimmte IP bzw. Netze setzen
gluster volume set <volumename> auth.allow <IP-Adresse1>, <IP-Adresse2>, <IP-Adresse3>, z.B.

 

# gluster volume set vol1 auth.allow 172.16.0.101, 172.16.0.102, 172.16.0.103

 

oder für ganzes Netz 172.16.0.0/22 zulassen, aber nicht für andere Netze.

# gluster volume set vol1 auth.allow 172.16.0.*

 

So kann man die Zugriff-Berechtigung auslesen

# gluster volume get <volume> all   // z.B. # gluster volume get vol1 all
Punkt
Einige Gluster Befehle. In unserem Fall <volumename> = vol1

 

# gluster volume status all
# gluster volume list
# gluster volume info <volumename>
# gluster volume status <volumename> detail
# gluster volume status <volumename> client
# gluster volume status <volumename> mem
# gluster volume status <volumename> inode
# gluster volume status <volumename> fd
# gluster volume status <volumename> callpool
// info zum Replikationsstatus
# gluster volume heal <volumename> info
// volname heilen
# gluster volume heal <volumename>
// volname heilen
# gluster volume heal <volumename> full
// es wird überprüft, ob split-brain
# gluster volume heal <volumename> info split-brain

GlusterFS in Proxmox VE einbinden.

Punkt
Die GlusterFS Installation und Konfiguration haben wir auf Proxmox VE gemacht. Wir haben jetzt die Möglichkeit, den Festplatten-Speicher des verteilten Systems unter Proxmox VE einzubinden und zu nutzen. Das WEB-Interface wird gestartet https://<IP-Adresse>:8006 in unserem Beispiel https://172.16.0.101:8006

 

Punkt
Alle Daten zu Erstellung des GlusterFS Festplattenspeichers werden eingetragen. Danach haben wir einen Festplattenspeicherplatz mit dem Namen, in unserem Fall dataGluster. Wir können jetzt die VMs erstellen und die Festplatten der VMs in diesem Bereich definieren.

 

Punkt
Beim Ausfall einen Knoten (Node) laufen die Server weiter. Wenn ein Knoten ausfällt, auf dem VMs sind, werden die in kürzester Zeit automatisch auf ein anderen Knoten verschoben, selbstverständlich ohne Datenverlust.

 

GlausterFS Anbindung an einem Linux Server

Punkt
GlausterFS Anbindung an einem beliebigen Linux Server ist sehr einfach. Zuerst muss man ein GlusterFS-Cient Paket installieren.

 

# apt install glusterfs-client

 

Punkt
Die Namen der 3 Server, auf dem sich GlusterFS befindet, müssen in DNS eingetragen sein, wenn nicht, dann müssen wir das in der Host-Datei auf dem Linux Server machen, auch wenn wir das GlusterFS mit der IP-Adresse mounten möchten. Ist das nicht der Fall, bekommen wir eine Fehlermeldung beim mounten.
Welchen Server man beim Mounten angibt, ist egal. Der Linux Server holt sich die Konfiguration und kommuniziert ab da selbst mit den beteiligten GlusterFS Servern.

172.16.0.101    pve1
172.16.0.102    pve2
172.16.0.103    pve3

 

# mount -t glusterfs 172.16.0.101:/vol1 /mnt/glusterfs/