Speicherlösungen · 6 min read · Jan 12, 2026

Hochverfügbarkeits-Speicher mit GlusterFS 3.0.x auf Debian Squeeze - Automatische Dateireplikation über zwei Speicherserver

Dieses Tutorial zeigt, wie man einen hochverfügbaren Speicher mit zwei Speicherservern (Debian Squeeze) 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 Squeeze) 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 wie x86_64-Servern mit SATA-II-RAID und Infiniband HBA bestehen.

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 Einrichtung 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 Squeeze verfügbar, daher können wir es wie folgt installieren:

apt-get install glusterfs-server

Der Befehl

glusterfs --version

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

root@server1:~# glusterfs --version  
glusterfs 3.0.5 built on Jul 13 2010 16:44:21  
Repository revision: v3.0.5  
Copyright (c) 2006-2009 Gluster Inc.   
GlusterFS kommt ohne jegliche Garantie.  
Sie dürfen Kopien von GlusterFS unter den Bedingungen der GNU General Public License weiterverbreiten.  
root@server1:~#

Als nächstes erstellen wir einige Verzeichnisse:

mkdir /data/  
mkdir /data/export  
mkdir /data/export-ns

Jetzt erstellen wir die GlusterFS-Serverkonfigurationsdatei /etc/glusterfs/glusterfsd.vol (wir machen zuerst eine Sicherung der ursprünglichen Datei /etc/glusterfs/glusterfsd.vol), die definiert, welches Verzeichnis exportiert wird (/data/export) und welcher Client sich verbinden darf (192.168.0.102 = client1.example.com):

cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig  
cat /dev/null > /etc/glusterfs/glusterfsd.vol  
vi /etc/glusterfs/glusterfsd.vol

| volume posix type storage/posix option directory /data/export end-volume volume locks type features/locks subvolumes posix end-volume volume brick type performance/io-threads option thread-count 8 subvolumes locks end-volume volume server type protocol/server option transport-type tcp option auth.addr.brick.allow 192.168.0.102 subvolumes brick end-volume |

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).

Anschließend starten wir den GlusterFS-Server:

/etc/init.d/glusterfs-server start

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

Als nächstes erstellen wir die Datei /etc/glusterfs/glusterfs.vol (wir machen zuerst eine Sicherung der ursprünglichen Datei /etc/glusterfs/glusterfs.vol):

cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig  
cat /dev/null > /etc/glusterfs/glusterfs.vol  
vi /etc/glusterfs/glusterfs.vol

| volume remote1 type protocol/client option transport-type tcp option remote-host server1.example.com option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host server2.example.com option remote-subvolume brick end-volume volume replicate type cluster/replicate subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |

Stellen Sie sicher, dass Sie die richtigen Server-Hostnamen oder IP-Adressen in den Zeilen option remote-host verwenden!

Das war’s! Jetzt können wir das GlusterFS-Dateisystem mit einem der folgenden beiden Befehle auf /mnt/glusterfs einhängen:

glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

oder

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

Sie sollten jetzt den neuen Share in den Ausgaben von…

mount
root@client1:~# mount  
/dev/sda1 on / type ext3 (rw,errors=remount-ro)  
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)  
proc on /proc type proc (rw,noexec,nosuid,nodev)  
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)  
udev on /dev type tmpfs (rw,mode=0755)  
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)  
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)  
fusectl on /sys/fs/fuse/connections type fusectl (rw)  
/etc/glusterfs/glusterfs.vol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)  
root@client1:~#

… und…

df -h
root@client1:~# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/sda1             29G  778M   27G   3% /  
tmpfs                 249M     0  249M   0% /lib/init/rw  
udev                  244M  100K  244M   1% /dev  
tmpfs                 249M     0  249M   0% /dev/shm  
/etc/glusterfs/glusterfs.vol  
                     18G  848M   16G   5% /mnt/glusterfs  
root@client1:~#

( server1.example.com und server2.example.com haben jeweils 18GB Speicher für das GlusterFS-Dateisystem, aber da die Daten gespiegelt werden, sieht der Client nicht 36GB (2 x 18GB), sondern nur 18GB.)

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

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

vi /etc/fstab

| [...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |

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

reboot

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

df -h

… und…

mount

Wenn die Änderung von /etc/fstab nicht hilft, machen Sie Ihre Änderung an /etc/fstab rückgängig und fügen Sie diese Zeile stattdessen zu /etc/rc.local hinzu (vor der exit 0-Zeile):

vi /etc/rc.local

| [...] /bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs [...] |

Dies stellt sicher, dass der Share eingehängt wird, nachdem das Netzwerk aktiv ist.

4 Testen

Jetzt erstellen wir einige Testdateien im GlusterFS-Share:

client1.example.com:

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

Jetzt überprüfen wir das Verzeichnis /data/export 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/export
root@server1:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2  
root@server1:~#

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

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/export auf server2.example.com sichtbar sein:

server2.example.com:

ls -l /data/export
root@server2:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@server2:~#

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

server1.example.com:

ls -l /data/export
root@server1:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2  
root@server1:~#

Wie Sie sehen, hat server1.example.com die Änderungen, die während seiner Ausfallzeit stattfanden, 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 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@client1:~#

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

server1.example.com:

ls -l /data/export
root@server1:~# ls -l /data/export  
total 8  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@server1:~#

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.