Dieses Tutorial zeigt, wie Sie mit GlusterFS vier einzelne Speicherserver (mit Fedora 12) zu einem großen Speicherserver (verteilter Speicher) kombinieren. Das Client-System (auch Fedora 12) 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. Speicherbausteine können aus jeder gängigen Hardware wie x86_64-Servern mit SATA-II-RAID und Infiniband-HBA hergestellt werden.
Bitte beachten Sie, dass diese Art der Speicherung (verteilter Speicher) keine Hochverfügbarkeitsfunktionen bietet, wie dies bei repliziertem Speicher der Fall wäre.
Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
In diesem Tutorial verwende ich fünf Systeme, vier Server und einen Client:
- server1.example.com:IP-Adresse 192.168.0.100 (Server)
- server2.example.com:IP-Adresse 192.168.0.101 (Server)
- server3.example.com:IP-Adresse 192.168.0.102 (Server)
- server4.example.com:IP-Adresse 192.168.0.103 (Server)
- client1.example.com:IP-Adresse 192.168.0.104 (Client)
Alle fünf 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 fünf Systemen die folgenden Zeilen enthält:
vi /etc/hosts
[...] 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 server3.example.com server3 192.168.0.103 server4.example.com server4 192.168.0.104 client1.example.com client1 [...] |
(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.example.com/server2.example.com/server3.example.com/server4.example.com:
Der GlusterFS-Server ist als Paket für Fedora 12 verfügbar, daher können wir ihn wie folgt installieren:
yum install glusterfs-server
Der Befehl
glusterfs --version
sollte jetzt die GlusterFS-Version anzeigen, die Sie gerade installiert haben (in diesem Fall 2.0.9):
[[email protected] ~]# glusterfs --version
glusterfs 2.0.9 erstellt am 00:12:49 00:12:49
Repository-Revision: v2.0.9
Copyright (c) 2006- 2009 Gluster Inc.
GlusterFS kommt mit ABSOLUT KEINER GARANTIE.
Sie können 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.101 =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.104 subvolumes brick end-volume |
Bitte beachten Sie, dass Platzhalter für die IP-Adressen verwendet werden können (z. B. 192.168.*) und mehrere IP-Adressen durch Komma getrennt angegeben werden können (z. B. 192.168.0.104, 192.168.0.105).
Anschließend erstellen wir die Systemstartlinks für den GlusterFS-Server und starten ihn:
chkconfig --levels 35 glusterfsd on
/etc/init.d/glusterfsd start
3 Einrichten des GlusterFS-Clients
client1.beispiel.com:
Es gibt ein GlusterFS-Client-RPM-Paket für Fedora 12, aber das Problem dabei ist, dass Sie Fehler wie df:`/mnt/glusterfs':Software cause connection abort oder df:`/mnt/glusterfs':Transport endpoint is not connected erhalten wenn Sie versuchen, auf die GlusterFS-Freigabe zuzugreifen. Deshalb bauen wir den GlusterFS-Client aus den Quellen, um diese Probleme zu vermeiden.
Bevor wir den GlusterFS-Client bauen, installieren wir seine Voraussetzungen:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Dann laden wir die Quellen von GlusterFS 2.0.9 herunter (bitte beachten Sie, dass dies dieselbe Version ist, die auf dem Server installiert ist!) und bauen GlusterFS wie folgt:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configure
Am Ende des ./configure-Befehls sollten Sie etwa Folgendes sehen:
[...]
Zusammenfassung der GlusterFS-Konfiguration
=========================
FUSE-Client :ja
Infiniband-Verben : ja
epoll IO multiplex : ja
Berkeley-DB : ja
libglusterfsclient : ja
argp-standalone : nein
[[email protected] glusterfs-2.0.9]#
make &&make install
ldconfig
Überprüfen Sie anschließend die GlusterFS-Version (sollte 2.0.9 sein):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 erstellt am 19. Februar 2010 19:20:46
Repository-Revision: v2.0.9
Copyright ( c) 2006-2009 Gluster Inc.
GlusterFS kommt mit ABSOLUT KEINER GARANTIE.
Sie können Kopien von GlusterFS unter den Bedingungen der GNU General Public License weitergeben.
[[email protected] glusterfs-2.0.9]#
Dann erstellen wir die folgenden zwei Verzeichnisse:
mkdir /mnt/glusterfs
mkdir /etc/glusterfs
Als nächstes erstellen wir die Datei /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 remote3 type protocol/client option transport-type tcp option remote-host server3.example.com option remote-subvolume brick end-volume volume remote4 type protocol/client option transport-type tcp option remote-host server4.example.com option remote-subvolume brick end-volume volume distribute type cluster/distribute subvolumes remote1 remote2 remote3 remote4 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes distribute 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 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...
sehenmount
[[email protected] ~]# mount
/dev/mapper/vg_server5-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts auf /dev/pts geben Sie devpts (rw,gid=5,mode=620) ein
tmpfs auf /dev/shm geben Sie tmpfs (rw)
/dev/sda1 ein bei /boot ext4 (rw) eingeben
keine bei /proc/sys/fs/binfmt_misc binfmt_misc (rw) eingeben
sunrpc bei /var/lib/nfs/rpc_pipefs rpc_pipefs (rw) eingeben
/etc/glusterfs/glusterfs.vol auf /mnt/glusterfs geben Sie fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... und ...
df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server5-lv_root
29G 2,5G 25G 10 %. / TMPFS 185m 0 185m 0%/dev/shm
/dev/sda1 194m 23m 161m 13%/boot
/etc/glusterfs/gusterfs.vol
114g 9,8g 99g 10%/mnt/ glusterfs
[[email protected] ~]#
(server1.example.com, server2.example.com, server3.example.com und server4.example.com haben jeweils etwa 28,5 GB Speicherplatz für das GlusterFS-Dateisystem, sodass die resultierende Freigabe eine Größe von etwa 4 x 28,5 hat GB (114 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 0 0 |
Um zu testen, ob Ihre modifizierte /etc/fstab funktioniert, starten Sie den Client neu:
reboot
Nach dem Neustart sollten Sie die Freigabe in den Ausgaben von ...
findendf -h
... und ...
mount
4 Testen
Lassen Sie uns nun einige Testdateien auf der GlusterFS-Freigabe erstellen:
client1.beispiel.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
touch /mnt/glusterfs/ test5
touch /mnt/glusterfs/test6
Sehen wir uns nun das Verzeichnis /data/export auf server1.example.com, server2.example.com, server3.example.com und server4.example.com an. Sie werden feststellen, dass jeder Speicherknoten nur einen Teil der Dateien/Verzeichnisse enthält, aus denen die GlusterFS-Freigabe auf dem Client besteht:
server1.beispiel.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test1
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test2
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test5
[[email protected] ~]#
server2.beispiel.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test4
[[E-Mail geschützt] ~]#
server3.beispiel.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test6
[[E-Mail geschützt] ~]#
server4.beispiel.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 20:15 test3
[[E-Mail geschützt] ~]#
5 Links
- GlusterFS:http://www.gluster.org/
- Fedora:http://fedoraproject.org/