Speicherlösungen · 7 min read · Jan 10, 2026

Hochverfügbarkeits-Speicher mit GlusterFS 3.2.x auf Debian Wheezy - Automatische Dateireplikation (Spiegelung) über zwei Speicherserver

Dieses Tutorial zeigt, wie man einen hochverfügbaren Speicher mit zwei Speicherservern (Debian Wheezy) einrichtet, die GlusterFS verwenden. Jeder Speicherserver wird ein Spiegel des anderen Speicherservers sein, und Dateien werden automatisch über beide Speicherserver repliziert. Das Client-System (ebenfalls Debian Wheezy) wird in der Lage sein, auf den Speicher zuzugreifen, als ob es sich um ein lokales Dateisystem handelt. GlusterFS ist ein clusterfähiges Dateisystem, das auf mehrere Petabyte skalierbar ist. Es aggregiert verschiedene Speicherbausteine über Infiniband RDMA oder TCP/IP-Verbindungen zu einem großen parallelen Netzwerkdateisystem. Speicherbausteine können aus beliebiger handelsüblicher Hardware bestehen, wie z.B. x86_64-Servern mit SATA-II-RAID und Infiniband HBA.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

In diesem Tutorial verwende ich drei Systeme, zwei Server und einen Client:

  • server1.example.com: IP-Adresse 192.168.0.100 (Server)
  • server2.example.com: IP-Adresse 192.168.0.101 (Server)
  • client1.example.com: IP-Adresse 192.168.0.102 (Client)

Alle drei Systeme sollten in der Lage sein, die Hostnamen der anderen Systeme aufzulösen. Wenn dies nicht über DNS möglich ist, sollten Sie die Datei /etc/hosts bearbeiten, sodass sie auf allen drei Systemen wie folgt aussieht:

vi /etc/hosts

| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 # Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |

(Es ist auch möglich, IP-Adressen anstelle von Hostnamen in der folgenden Konfiguration zu verwenden. Wenn Sie IP-Adressen verwenden möchten, müssen Sie sich keine Gedanken darüber machen, ob die Hostnamen aufgelöst werden können oder nicht.)

2 Einrichtung der GlusterFS-Server

server1.example.com/server2.example.com:

GlusterFS ist als Paket für Debian Wheezy verfügbar, daher können wir es wie folgt installieren:

apt-get install glusterfs-server

Der Befehl

glusterfsd --version

sollte jetzt die GlusterFS-Version anzeigen, die Sie gerade installiert haben (in diesem Fall 3.2.7):

root@server1:~# glusterfsd --version  
glusterfs 3.2.7 built on Nov 12 2012 19:30:08  
Repository revision: git://git.gluster.com/glusterfs.git  
Copyright (c) 2006-2011 Gluster Inc.   
GlusterFS kommt ohne jegliche Gewährleistung.  
Sie dürfen Kopien von GlusterFS unter den Bedingungen der GNU General Public License weiterverbreiten.  
root@server1:~#

Wenn Sie eine Firewall verwenden, stellen Sie sicher, dass die TCP-Ports 111, 24007, 24008, 24009-(24009 + Anzahl der Bausteine über alle Volumes) auf server1.example.com und server2.example.com geöffnet sind.

Als nächstes müssen wir server2.example.com zum vertrauenswürdigen Speicherpool hinzufügen (bitte beachten Sie, dass ich alle GlusterFS-Konfigurationsbefehle von server1.example.com ausführe, aber Sie können sie auch von server2.example.com ausführen, da die Konfiguration zwischen den GlusterFS-Knoten repliziert wird - stellen Sie nur sicher, dass Sie die richtigen Hostnamen oder IP-Adressen verwenden):

server1.example.com:

Führen Sie auf server1.example.com aus

gluster peer probe server2.example.com
root@server1:~# gluster peer probe server2.example.com  
Probe erfolgreich  
root@server1:~#

Der Status des vertrauenswürdigen Speicherpools sollte jetzt ähnlich wie folgt aussehen:

gluster peer status
root@server1:~# gluster peer status  
Anzahl der Peers: 1
Hostname: server2.example.com  
Uuid: d19cb707-7b23-4d11-8e9c-183cd0a18d96  
Status: Peer im Cluster (Verbunden)  
root@server1:~#

Als nächstes erstellen wir den Share mit dem Namen testvol mit zwei Replikaten (bitte beachten Sie, dass die Anzahl der Replikate der Anzahl der Server in diesem Fall entspricht, da wir eine Spiegelung einrichten möchten) auf server1.example.com und server2.example.com im Verzeichnis /data (dies wird erstellt, wenn es nicht existiert):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
root@server1:~# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data  
Erstellung des Volumes testvol war erfolgreich. Bitte starten Sie das Volume, um auf Daten zuzugreifen.  
root@server1:~#

Starten Sie das Volume:

gluster volume start testvol

Es ist möglich, dass der obige Befehl Ihnen mitteilt, dass die Aktion nicht erfolgreich war:

root@server1:~# gluster volume start testvol  
Starten des Volumes testvol war nicht erfolgreich  
root@server1:~#

In diesem Fall sollten Sie die Ausgabe von…

server1.example.com/server2.example.com:

netstat -tap | grep glusterfsd

auf beiden Servern überprüfen.

Wenn Sie eine Ausgabe wie diese erhalten…

root@server1:~# netstat -tap | grep glusterfsd  
tcp        0      0 *:24009                 *:*                     LISTEN      1548/glusterfsd  
tcp        0      0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1548/glusterfsd  
root@server1:~#

… ist alles in Ordnung, aber wenn Sie keine Ausgabe erhalten…

root@server2:~# netstat -tap | grep glusterfsd  
root@server2:~#

… starten Sie den GlusterFS-Daemon auf dem entsprechenden Server (server2.example.com in diesem Fall):

server2.example.com:

/etc/init.d/glusterfs-server restart

Überprüfen Sie dann erneut die Ausgabe von…

netstat -tap | grep glusterfsd

… auf diesem Server - es sollte jetzt so aussehen:

root@server2:~# netstat -tap | grep glusterfsd  
tcp        0      0 *:24010                 *:*                     LISTEN      1458/glusterfsd  
tcp        0      0 localhost.localdom:1021 localhost.localdo:24007 ESTABLISHED 1458/glusterfsd  
root@server2:~#

Jetzt zurück zu server1.example.com:

server1.example.com:

Sie können den Status des Volumes mit dem Befehl

gluster volume info
root@server1:~# gluster volume info
Volume Name: testvol  
Typ: Replikat  
Status: Gestartet  
Anzahl der Bausteine: 2  
Transporttyp: tcp  
Bausteine:  
Brick1: server1.example.com:/data  
Brick2: server2.example.com:/data  
root@server1:~#

Standardmäßig können alle Clients eine Verbindung zum Volume herstellen. Wenn Sie nur client1.example.com (= 192.168.0.102) Zugriff gewähren möchten, führen Sie aus:

gluster volume set testvol auth.allow 192.168.0.102

Bitte beachten Sie, dass es möglich ist, Platzhalter für die IP-Adressen zu verwenden (wie 192.168.*) und dass Sie mehrere IP-Adressen durch Kommas getrennt angeben können (z.B. 192.168.0.102,192.168.0.103).

Die Volume-Informationen sollten jetzt den aktualisierten Status anzeigen:

gluster volume info
root@server1:~# gluster volume info
Volume Name: testvol  
Typ: Replikat  
Status: Gestartet  
Anzahl der Bausteine: 2  
Transporttyp: tcp  
Bausteine:  
Brick1: server1.example.com:/data  
Brick2: server2.example.com:/data  
Optionen umkonfiguriert:  
auth.allow: 192.168.0.102  
root@server1:~#

3 Einrichtung des GlusterFS-Clients

client1.example.com:

Auf dem Client können wir den GlusterFS-Client wie folgt installieren:

apt-get install glusterfs-client

Dann erstellen wir das folgende Verzeichnis:

mkdir /mnt/glusterfs

Das war’s! Jetzt können wir das GlusterFS-Dateisystem mit dem folgenden Befehl in /mnt/glusterfs einhängen:

mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Statt server1.example.com können Sie auch server2.example.com im obigen Befehl verwenden!)

Sie sollten jetzt den neuen Share in den Ausgaben von…

mount
root@client1:~# mount  
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)  
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)  
odev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=126813,mode=755)  
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755)  
/dev/mapper/server1-root on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)  
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=205400k)  
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue)  
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)  
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)  
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)  
root@client1:~#

… und…

df -h
root@client1:~# df -h  
Dateisystem                     Größe Benutzt Verfügbar Ben% Eingehängt in  
rootfs                          29G  1.2G   26G   5%  /  
udev                           10M     0   10M   0%  /dev  
tmpfs                          101M  240K  101M   1%  /run  
/dev/mapper/server1-root        29G  1.2G   26G   5%  /  
tmpfs                          5.0M     0  5.0M   0%  /run/lock  
tmpfs                          201M     0  201M   0%  /run/shm  
/dev/sda1                      228M   18M  199M   9%  /boot  
server1.example.com:/testvol   29G  1.2G   26G   5%  /mnt/glusterfs  
root@client1:~#

Anstatt den GlusterFS-Share manuell auf dem Client zu mounten, könnten Sie /etc/fstab ändern, sodass der Share automatisch beim Booten des Clients gemountet wird.

Öffnen Sie /etc/fstab und fügen Sie die folgende Zeile hinzu:

vi /etc/fstab

| [...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |

(Wiederum können Sie anstelle von server1.example.com auch server2.example.com verwenden!)

Um zu testen, ob Ihre modifizierte /etc/fstab funktioniert, starten Sie den Client neu:

reboot

Nach dem Neustart sollten Sie den Share in den Ausgaben von…

df -h

… und…

mount

4 Testen

Jetzt lassen Sie uns einige Testdateien auf dem GlusterFS-Share erstellen:

client1.example.com:

touch /mnt/glusterfs/test1  
touch /mnt/glusterfs/test2

Jetzt überprüfen wir das Verzeichnis /data auf server1.example.com und server2.example.com. Die Dateien test1 und test2 sollten auf jedem Knoten vorhanden sein:

server1.example.com/server2.example.com:

ls -l /data
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test2  
root@server1:~#

Jetzt fahren wir server1.example.com herunter und fügen/löschen einige Dateien auf dem GlusterFS-Share auf client1.example.com.

server1.example.com:

shutdown -h now

client1.example.com:

touch /mnt/glusterfs/test3  
touch /mnt/glusterfs/test4  
rm -f /mnt/glusterfs/test2

Die Änderungen sollten im Verzeichnis /data auf server2.example.com sichtbar sein:

server2.example.com:

ls -l /data
root@server2:~# ls -l /data  
total 8  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4  
root@server2:~#

Lassen Sie uns server1.example.com wieder starten und einen Blick auf das Verzeichnis /data werfen:

server1.example.com:

ls -l /data
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test2  
root@server1:~#

Wie Sie sehen, hat server1.example.com die Änderungen, die während seiner Ausfallzeit passiert sind, nicht bemerkt. Das ist leicht zu beheben, alles was wir tun müssen, ist einen Lese-Befehl auf dem GlusterFS-Share auf client1.example.com auszuführen, z.B.:

client1.example.com:

ls -l /mnt/glusterfs/
root@client1:~# ls -l /mnt/glusterfs/  
total 8  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4  
root@client1:~#

Jetzt schauen Sie sich das Verzeichnis /data auf server1.example.com erneut an, und Sie sollten sehen, dass die Änderungen auf diesen Knoten repliziert wurden:

server1.example.com:

ls -l /data
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4  
root@server1:~#

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.