Dieses Tutorial zeigt, wie Sie einen Hochverfügbarkeitsspeicher mit zwei Speicherservern (Debian Squeeze) einrichten, die GlusterFS verwenden. Jeder Speicherserver ist ein Spiegel des anderen Speicherservers, und Dateien werden automatisch über beide Speicherserver repliziert. Das Client-System (auch Debian Squeeze) kann auf den Speicher zugreifen, als wäre es ein lokales Dateisystem. GlusterFS ist ein geclustertes Dateisystem, das auf mehrere Petabyte skaliert werden kann. Es aggregiert verschiedene Speicherbausteine über Infiniband-RDMA- oder TCP/IP-Verbindungen zu einem großen parallelen Netzwerkdateisystem. Storage Bricks können aus jeder handelsüblichen Hardware wie x86_64-Servern mit SATA-II-RAID und Infiniband-HBA hergestellt werden.
Ich gebe keine Garantie dafür, 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 so bearbeiten, dass sie auf allen drei Systemen wie folgt aussieht:
vi /etc/hosts
127.0.0.1 localhost.localdomain localhost192.168.0.100 server1.example.com server1192.168.0.101 server2.example.com server2192.168.0.102 client1.example.com client1# Die folgenden Zeilen sind für IPv6-fähige Hosts wünschenswert::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allroutersff02 ::3 ip6-allhosts |
(Es ist auch möglich, IP-Adressen anstelle von Hostnamen im folgenden Setup zu verwenden. Wenn Sie lieber IP-Adressen verwenden, müssen Sie sich nicht darum kümmern, ob die Hostnamen aufgelöst werden können oder nicht.)
2 Einrichten der GlusterFS-Server
server1.beispiel.com/server2.beispiel.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 gerade installierte GlusterFS-Version anzeigen (in diesem Fall 3.0.5):
[email protected]:~# glusterfs --version
glusterfs 3.0.5 erstellt am 13. Juli 2010 16:44:21
Repository-Revision:v3.0.5
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS wird mit ABSOLUT KEINER GARANTIE geliefert.
Sie dürfen Kopien von GlusterFS unter den Bedingungen der GNU General Public License weitergeben.
[ E-Mail-geschützt]:~#
Als nächstes erstellen wir ein paar Verzeichnisse:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
Jetzt erstellen wir die GlusterFS-Serverkonfigurationsdatei /etc/glusterfs/glusterfsd.vol (wir erstellen zuerst eine Sicherungskopie der ursprünglichen /etc/glusterfs/glusterfsd.vol-Datei), die definiert, welches Verzeichnis exportiert wird (/data/export) und was Client darf sich verbinden (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/exportend-volumevolume locks type features/locks subvolumes posixend-volumevolume brick type performance/io-threads option thread-count 8 subvolumes locksend-volumevolume server type protocol/server option transport-type tcp option auth.addr.brick.allow 192.168.0.102 subvolumes brickend-volume |
Bitte beachten Sie, dass für die IP-Adressen Wildcards verwendet werden können (z. B. 192.168.*) und mehrere IP-Adressen durch Komma getrennt angegeben werden 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 Einrichten des GlusterFS-Clients
client1.beispiel.com:
Auf dem Client können wir den GlusterFS-Client wie folgt installieren:
apt-get install glusterfs-client
Dann erstellen wir folgendes Verzeichnis:
mkdir /mnt/glusterfs
Als nächstes erstellen wir die Datei /etc/glusterfs/glusterfs.vol (wir erstellen zuerst eine Sicherungskopie der Originaldatei /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 brickend-volumevolume remote2 type protocol/ client option transport-type tcp option remote-host server2.example.com option remote-subvolume brickend-volumevolume replicate type cluster/replicate subvolumes remote1 remote2end-volume volume writebehind type performance/write-behind option window-size 1MB subvolume replicateend-volumevolume cache type performance/io-cache option cache-size 512MB subvolumes writebehindend-volume |
Stellen Sie sicher, dass Sie die richtigen Server-Hostnamen oder IP-Adressen in den Zeilen der Option remote-host verwenden!
Das ist es! Jetzt können wir das GlusterFS-Dateisystem mit einem der folgenden beiden Befehle in /mnt/glusterfs einhängen:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
oder
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
Sie sollten nun die neue Freigabe in den Ausgaben von...
seheneinhängen
[email protected]:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc auf /proc tippe proc (rw,noexec,nosuid,nodev)
sysfs auf /sys tippe sysfs (rw,noexec,nosuid,nodev)
udev auf /dev tippe tmpfs (rw,mode=0755)
tmpfs auf /dev/shm geben Sie tmpfs (rw,nosuid,nodev)
devpts auf /dev/pts geben Sie 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)
[email protected]:~#
... und ...
df -h
[E-Mail geschützt]:~#df -h
Dateisystemgröße verwendete Verfügung Use Used%montiert auf
/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/gusterfs/glusterfs.vol
18G 848M 16G 5%/ mnt/glusterfs
[E-Mail geschützt]:~#
(server1.example.com und server2.example.com haben jeweils 18 GB Speicherplatz für das GlusterFS-Dateisystem, aber da die Daten gespiegelt werden, sieht der Client nicht 36 GB (2 x 18 GB), sondern nur 18 GB.)
Anstatt die GlusterFS-Freigabe manuell auf dem Client zu mounten, könnten Sie /etc/fstab so ändern, dass die Freigabe automatisch gemountet wird, wenn der Client startet.
Öffnen Sie /etc/fstab und fügen Sie die folgende Zeile an:
vi /etc/fstab
[...]/etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
Um zu testen, ob Ihre modifizierte /etc/fstab funktioniert, starten Sie den Client neu:
Neustart
Nach dem Neustart sollten Sie die Freigabe in den Ausgaben von ...
findendf -h
... und ...
einhängen
Wenn das Ändern von /etc/fstab nicht hilft, machen Sie Ihre Änderung an /etc/fstab rückgängig und fügen Sie stattdessen diese Zeile zu /etc/rc.local hinzu (vor der Zeile exit 0):
vi /etc/rc.local
[...]/bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs[...] |
Dadurch wird sichergestellt, dass die Freigabe gemountet wird, nachdem das Netzwerk hochgefahren ist.
4 Testen
Lassen Sie uns nun einige Testdateien auf der GlusterFS-Freigabe erstellen:
client1.beispiel.com:
Berühren Sie /mnt/glusterfs/test1
Berühren Sie /mnt/glusterfs/test2
Lassen Sie uns nun das Verzeichnis /data/export auf server1.example.com und server2.example.com überprüfen. Die Dateien test1 und test2 sollten auf jedem Knoten vorhanden sein:
server1.beispiel.com/server2.beispiel.com:
ls -l /data/export
[email protected]:~# 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
[email protected]:~#
Jetzt fahren wir server1.example.com herunter und fügen einige Dateien auf der GlusterFS-Freigabe auf client1.example.com hinzu/löschen sie.
server1.beispiel.com:
shutdown -h now
client1.beispiel.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.beispiel.com:
ls -l /data/export
[email protected]:~# 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
[E-Mail-geschützt]:~#
Lassen Sie uns server1.example.com erneut booten und einen Blick auf das /data/export-Verzeichnis werfen:
server1.beispiel.com:
ls -l /data/export
[email protected]:~# 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
[email protected]:~#
Wie Sie sehen, hat server1.example.com die Änderungen nicht bemerkt, die während des Ausfalls vorgenommen wurden. Dies ist einfach zu beheben, wir müssen lediglich einen Lesebefehl auf der GlusterFS-Freigabe auf client1.example.com aufrufen, z. B.:
client1.beispiel.com:
ls -l /mnt/glusterfs/
[email protected]:~# ls -l /mnt/glusterfs/
insgesamt 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
[E-Mail-geschützt]:~#
Sehen Sie sich nun erneut das Verzeichnis /data/export auf server1.example.com an, und Sie sollten sehen, dass die Änderungen auf diesen Knoten repliziert wurden:
server1.beispiel.com:
ls -l /data/export
[email protected]:~# ls -l /data/export
insgesamt 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
[E-Mail-geschützt]:~#
5 Links
- GlusterFS:http://www.gluster.org/
- Debian:http://www.debian.org/