GlusterFS

GlusterFS ist ein verteiltes Dateisystem, was das Speichern von Daten über mehrere Knoten hinweg ermöglicht. Dabei versteht es mehrere Betriebsmodus (plr. ausgesprochen "Moduus"):

 

Was haben wir vor?

Ich zeige hier den einfachen "Replicated Storage".

Was brauchen wir?

Wir benötigen zwei einfache Linux-Server. Ich habe hierfür zwei Debian Stretch Server VM in Minimal-Installation bereitgestellt und jeweils eine weitere Platte hinzugefügt. Die Platte habe ich dann Partitioniert und mit Ext4 formatiert. Wer mag, der Legt noch ein LVM dazwischen. Ein Nameserver sollte vorhanden sein, dass alle Hostnamen und IPs vernünftig hinterlegt sind. Alternativ kann es auch In der /etc/hosts sein.

 

Die Installation

Zunächst installieren wir die notwendigen Pakete mit

apt-get install glusterfs-common glusterfs-server -y

und das auf beiden Knoten. Das war es schon.

 

Die Konfiguration:

Nun erstellen wir das Verzeichnis /bricks/brick1/ auf beiden Knoten und fügen in der /etc/fstab die Festplatte, genauer die Partition, hinzu, die wir für GlusterFS verwenden wollen. Bei mir ist es "sdb1".

root@node1:/etc/fstab

/dev/sdb1    /bricks/brick1    ext4    defaults    0 0

Diesen Schritt ebenfalls auf beiden Knoten umsetzen und dann ein "mount -a" ausführen, sodass /dev/sdb1 nach /bricks/brick1/ gemountet wird. Ein "df -h" zeigt dann das Ergebnis.

 

Im nächsten Schritt wollen wir beide Knoten miteinander bekannt machen. Dazu wird ein

gluster peer probe node1

ausgeführt. Nun kennen sich beide Knoten. Ein "gluster pool list" zeigt, dass beide Knoten miteinander verbunden sind.

 

Das verteilte Volume erstellen

Jetzt sind wir an dem Punkt wo es interessant wird, denn wir erstellen den Pool, der von Knoten zu Knoten repliziert werden soll.

Zunächst erstellen wir ein neuen Verzeichnis auf beiden Servern:

mkdir -p /bricks/brick1/volume1

Dann sagen wir gluster, dass es den Pool erstellen kann. Den Pool nennen wir hier replicated_vol1. Dieser Befehl muss nur auf einem Knoten ausgeführt werden.

gluster volume create replicated_vol1 replica 2 node1:/bricks/brick1/volume1 node2:/bricks/brick1/volume1

Nun noch das Volume starten mit: gluster volume start replicated_vol1

 

Volume Info und Status

gluster volume info replicated_vol1

gluster volume status replicated_vol1

 

Auf Funktion testen

Die Replikation wird durch den Client angestoßen. Das bedeutet, dass es nicht reicht, wenn man als Benutzer in /bricks/brick1/volume1/ eine Datei oder Verzeichnis erstellt. Es muss ein Client her, der das GlusterFS mountet und dorthin Daten verschiebt.

Zunächst erstellen wir ein Verzeichnis. Ich benutze dafür /data/. Dann mounte ich wieder:

root@node1:/etc/fstab

node1:/replicated_vol1    /data    glusterfs    defaults,_netdev    0 0

Nun mit "mount -a" das Mounten auslösen. Es sollte nun /data/ gemountet sein.

Nun kann man in /data/ Dateien und Verzeichnisse erstellen. Ich habe mit DD einige große Dateien erstellt damit man dem System mittels bmon bzw. iptraf-ng (auf den Knoten) beim replizieren zusehen kann.

 

Darf's ein bisschen mehr sein?

Wer Lust hat, der installiert sich noch Pacemaker/Corosync und gibt den Knoten eine virtuelle IP, die bei Ausfall auf den anderen Knoten geht und legt im DNS noch einen Hostnamen dafür an. Clients können dann diesen Hostnamen (bspw. glusterfs.myhomelab.domain) verwenden. Im Falle eines Ausfalls wechselt dann der Client auf den anderen Knoten.