In dieser Anleitung setzen wir ClusterFS auf.
Ziel wird es sein, Daten auf mehreren Systemen synchron zu halten, um sie von allen Systemen direkt aufrufen zu können.
Damit habe ich es geschafft, persistente Daten von Docker Container auf mehreren Systemen zu synchronisieren, um sie im Docker Swarm immer erreichbar zu haben.
In dieser Anleitung richten wir ClusterFS auf die einfachste Art ein, damit wir die Daten synchron halten können.
Man kann die Installation noch mit weiteren Vorkehrungen absichern und verbessern, dies ist aber nicht Ziel dieser Anleitung.
Wir brauchen erst einmal etwas, was funktioniert 🙂
Ich empfehle es aber NICHT, ClusterFS in dieser Art im Internet erreichbar zu machen!
Eine synchronisation zwischen mehreren Servern über das Internet, sollte durch z.B. eine VPN abgesichert werden.
Die Offizielle Webseite von Gluster findest du HIER.
Eine Anleitung in Englisch mit vielen Hinweisen gibts HIER.
Was benötigen wir?
– Minimum 2 Systeme (am besten hardwaretechnisch identisch)
– Ein Linux-System
– Speicherplatz auf dem System
– Root-Zugriff vorhanden
– Bei LXC Containern muss Fuse aktiviert sein (Proxmox -> Container -> Optionen -> Features -> Bearbeiten -> Anhaken + Container neu starten)
Los gehts!
1. Hostnames fest hinterlegen
Um die Systeme direkt per Hostname zu erreichen, ist es ratsam, diese fest im System zu hinterlegen.
So sind wir unabhängiger von DNS-Servern.
Der Schritt ist freiwillig, es kann auch mit IP-Adressen gearbeitet werden.
# nano /etc/hosts 192.168.1.101 gluster01 gluster01.hoerli.lan 192.168.1.102 gluster02 gluster02.hoerli.lan 192.168.1.103 gluster03 gluster03.hoerli.lan
Wir können dann einmal testen, ob die Systeme per Hostname erreichbar sind.
# ping -c 3 gluster01 # ping -c 3 gluster02 # ping -c 3 gluster03
Sind alle Systeme von allen Systemen aus erreichbar, können wir weiter machen.
2. Repository anbinden
Die beste möglichkeit der Installation, ist das anbinden des Repository.
Diese Anleitung nutzt das Repo für Debian 10. Du kannst HIER dein passendes Repo aussuchen.
Füge das Repo auf all deinen Systemen hinzu.
# apt install software-properties-common -y # add-apt-repository ppa:gluster/glusterfs-10 # apt update
3. ClusterFS installieren
Nun installieren wir Cluster-FS. Wiederhole dies auf all deinen Systemen.
# apt install glusterfs-server -y # systemctl start glusterd # systemctl enable glusterd
4. Verbindung testen
Nun prüfen wir, ob von gluster01 die anderen Systeme zur Verfügung stehen:
# gluster peer probe gluster02 # gluster peer probe gluster03
Unsere Instanzen verbinden sich nun miteinander. Wir müssen nichts weiter tun.
Der Status von ClusterFS kann mit diesen beiden Befehlen geprüft werden:
# gluster peer status # gluster pool list
5. ClusterFS Volume erstellen
Nun ist es an der Zeit, ein ClusterFS-Speicher zu erstellen, welcher dann synchronisiert wird.
Ein Volume erstellen wir nun mit folgendem Befehl:
# gluster volume create glusterfsname replica 3 gluster01:/mnt/Pfad/Zur/Festplatte gluster02:/export/Pfad/Zur/Festplatte gluster03:/export/Pfad/Zur/Festplatte
>> Replica = Alles ist synchron und jeder Host hat alle Daten
>> 3 = Die Anzahl an Replizierungen, die vorgehalten werden sollen. Bei nur 2 Host, die Zahl von 3 auf 2 ändern
>> Der DNS-Name kann gegen eine IP abgeändert werden
>> /export/Pfad/Zur/Festplatte = Gebe hier einen Pfad auf jedem System an, wo genügend Speicherplatz zur Verfügung steht. Pfade können abweichen, ich empfehle aber immer die gleichen auf allen Systemen zu verwenden. (Beispiel: /mnt/HDD-01/
Nach dem Abschicken des Befehls, prüfe wie es um dein Cluster steht:
# gluster volume info # gluster volume start glusterfsname
Was ist hier passiert?
Wir haben auf der angebundenen Festplatte nun ein neues „virtuelles“ Volume erstellt, worin gleich GlusterFS die Daten schreibt.
Dieses Volume müssen wir auch gleich erst einhängen, bevor es beschrieben werden kann.
Das Volumte sollte jetzt an einen Ort eingehängt werden. Sonst werden nur Daten empfangen, es können aber keine bearbeitet oder gesendet werden.
Der Mountpfad sollte bei ALLEN Hosts der gleiche sein, damit z.B. Docker funktioniert. Dort kann man ja nur 1 Mountpfad für Volumes angeben.
Das bewerkstelligen wir wie folgt:
Lege auf jedem Host ein neuer Ordner an, indem das Volume eingehängt wird:
# mkdir -p /mnt/EinTollerMountName
Hänge nun PRO Host das Volume ein:
# mount -t glusterfs gluster01:/glusterfsname /mnt/EinTollerMountName # mount -t glusterfs gluster02:/glusterfsname /mnt/EinTollerMountName # mount -t glusterfs gluster03:/glusterfsname /mnt/EinTollerMountName # df -h
Das Volume sollte jetzt vorhanden sein.
Legen wir mal eine Datei an und schauen dann in den Ordner:
# touch /mnt/EinTollerMountName/test1.txt # ls /mnt/EinTollerMountName/
Schau jetzt mal auf die anderen Hosts.
Liegt dort etwa jetzt eine Datei mit dem Namen test1.txt?
Nun müssen wir noch das Volume automatisch beim Systemstart einhängen lassen.
Setze also den Moundpfad nun passend für deine Systeme:
# nano /ets/fstab gluster01:/glusterfsname /mnt/EinTollerMountName/ glusterfs defaults 0 0
Auch hier kann der Hostname mit einer IP ausgetauscht werden, falls du ihn nicht nutzen möchtest.
Und damit ist unser ClusterFS nun LIVE!
Wir können nun sehr bequem Daten auf allen Systemen synchronisieren.
Wie gehts nun weiter?
Ich habe z.B. Docker Swarm in Betrieb und synchronisiere hier die persistenten Daten von Containern über alle Hosts.
Aktuell läuft bei mit ein Pi-Hole im Swarm. Fällt ein Host (z.B. durch Wartung) aus, hat der andere Host alle notwendigen Daten, um den Betrieb zu übernehmen.
Ein weiterer denkbarer Anwendungsfall, wäre hier ein einfaches CDN. Wir können so normale Daten auf allen Hosts synchronisieren und ein passender Webserver bereitstellen.
Es sind also fast keine Limits gesetzt!
Was du mit GlusterFS nun anfangen möchtest, ist ganz alleine deine Angelegenheit 🙂
=> Ich würde mich aber über deine Erfolgsgeschichten freuen!
GlusterFS absichern
Du kannst den Zugriff auf dein Gluster auf IP-Adressen einschränken.
So kann nicht jeder neue Host einfach dem Gluster beitreten.
# gluster volume set VOL_NAME auth.allow IP1,IP2
>> Ersetze IP1 und IP2 hier durch die IP-Adressen der erlaubten Hosts. Weitere können mit einem Komma (,) hinzugefügt werden.
Ein neuer Host kann durch einfachs anpingen via Probe (# gluster peer probe gluster03) von einem Host im Gluster aufgenommen werden.
Sonderbar „sicher“ ist es daher nicht. Besser als nichts, ist es aber.
Du kannst auch eine Transportverschlüsselung einrichten.
Das ist aber etwas aufwändiger.
Alle Infos dazu gibts in diesen zwei Anleitungen.
>> cyberciti.biz
>> redhat.com
Habe hier syncthing im Einsatz. Konfiguration geht über ein Webinterface und es gibt Clients für verschiedene Betriebssysteme, auch Android. Synchronisiert sehr schnell und recht zuverlässig, inklussive Löschen 8-o.
Sehr nützlicher Beitrag! Dieser erklährt GlusterFS kurz und bündig ohne langes herumgelaber!
So sollten alle technischen Beiträge im Internet sein.
Weiter so!