Dieses Tutorial zeigt, wie man einen eigenständigen Speicherserver auf Debian Lenny einrichtet. Anstelle von NFS werde ich hier GlusterFS verwenden. Das Client-System 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 zwei Systeme, einen Server und einen Client:
- server1.example.com:IP-Adresse 192.168.0.100 (Server)
- client1.example.com:IP-Adresse 192.168.0.101 (Client)
Beide Systeme sollten in der Lage sein, den Hostnamen des anderen Systems aufzulösen. Wenn dies nicht über DNS möglich ist, sollten Sie die Datei /etc/hosts so bearbeiten, dass sie auf beiden 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 client1.example.com client1 # The following lines are desirable for IPv6 capable 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 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 des GlusterFS-Servers
server1.beispiel.com:
GlusterFS ist nicht als Debian-Paket für Debian Lenny verfügbar, daher müssen wir es selbst bauen. Zuerst installieren wir die Voraussetzungen:
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev
Dann laden wir die neueste GlusterFS-Version von http://www.gluster.org/download.php herunter und erstellen sie wie folgt:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null
server1:/tmp/glusterfs-2.0.1# ./configure --prefix=/usr > /dev/null
Zusammenfassung der GlusterFS-Konfiguration
===========================
FUSE-Client : nein
Infiniband-Verben : nein
epoll IO multiplex : ja
Berkeley-DB :ja
libglusterfsclient : ja
mod_glusterfs : nein ()
argp-standalone : nein
server1:/tmp/glusterfs-2.0.1#
make &&make install
ldconfig
Der Befehl
glusterfs --version
sollte jetzt die GlusterFS-Version anzeigen, die Sie gerade kompiliert haben (in diesem Fall 2.0.1):
server1:/tmp/glusterfs-2.0.1# glusterfs --version
glusterfs 2.0.1 erstellt am 29. Mai 2009 17:23:10
Repository-Revision:5c1d9108c1529a1155963cb1911f8870a674ab5b
Copyright (c) 2006 -2009 Z RESEARCH Inc.
Für GlusterFS gilt ABSOLUT KEINE GEWÄHRLEISTUNG.
Sie dürfen Kopien von GlusterFS unter den Bedingungen der GNU General Public License weitergeben.
server1:/tmp/glusterfs-2.0.1#
Als nächstes erstellen wir ein paar Verzeichnisse:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
mkdir /etc/glusterfs
Jetzt erstellen wir die GlusterFS-Serverkonfigurationsdatei /etc/glusterfs/glusterfsd.vol, die definiert, welches Verzeichnis exportiert wird (/data/export) und welcher Client sich verbinden darf (192.168.0.101 =client1.example.com):
vi /etc/glusterfs/glusterfsd.vol
volume posix type storage/posix option directory /data/export end-volume volume locks type features/locks option mandatory-locks on 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.101 # Edit and add list of allowed clients comma separated IP addrs(names) here subvolumes brick end-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.101,192.168.0.102).
Anschließend erstellen wir die Systemstartlinks für das glusterfsd-Init-Skript...
update-rc.d glusterfsd defaults
... und starte glusterfsd:
/etc/init.d/glusterfsd start
3 Einrichten des GlusterFS-Clients
client1.beispiel.com:
Auf dem Client müssen wir fuse und GlusterFS installieren. Anstatt das libfuse2-Paket aus dem Debian-Repository zu installieren, installieren wir eine gepatchte Version mit besserer Unterstützung für GlusterFS.
Zuerst installieren wir die Voraussetzungen erneut:
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev
Dann bauen wir Fuse wie folgt (Sie finden die neueste gepatchte Fuse-Version auf ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/):
cd /tmp
wget ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/fuse-2.7.4glfs11.tar.gz
tar -zxvf fuse-2.7.4glfs11.tar. gz
cd fuse-2.7.4glfs11
./configure
make &&make install
Danach bauen wir GlusterFS (genauso wie auf dem Server)...
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null
make &&make install
ldconfig
glusterfs --version
... und erstellen Sie die folgenden beiden Verzeichnisse:
mkdir /mnt/glusterfs
mkdir /etc/glusterfs
Als nächstes erstellen wir die Datei /etc/glusterfs/glusterfs.vol:
vi /etc/glusterfs/glusterfs.vol
volume remote type protocol/client option transport-type tcp option remote-host server1.example.com # can be IP or hostname option remote-subvolume brick end-volume volume writebehind type performance/write-behind option window-size 4MB subvolumes remote end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |
Stellen Sie sicher, dass Sie den richtigen Server-Hostnamen oder die richtige IP-Adresse in der Option Remote-Host-Zeile 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
client1:~# mount
/dev/mapper/vg0-root on / ext3 eingeben (rw,errors=remount-ro)
tmpfs on /lib/init/rw tmpfs eingeben (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 auf /dev/shm geben Sie tmpfs (rw,nosuid,nodev)
devpts auf /dev/pts geben Sie devpts (rw,noexec,nosuid,gid=5, mode=620)
/dev/sda1 on /boot type ext3 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/etc/glusterfs/glusterfs. vol auf /mnt/glusterfs geben Sie fuse.glusterfs (rw,max_read=131072,allow_other,default_permissions)
client1:~#
... und ...
df -h
client1:~# df -h
Dateisystem Größe Verwendet Avail Use% Gemountet auf
/dev/mapper/vg0-root 19G 812M 17G 5 % /
tmpfs 253M 253M init/rw
udev 10m 80k 10m 1%/dev
tmpfs 253m 0 253m 0%/dev/shm
/dev/sda1 471m 20m 427m 5%/boot
/etc. /glusterfs/glusterfs.vol
29G 811M 27G 3 % /mnt/glusterfs
client1:~#
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 Links
- GlusterFS:http://www.gluster.org/
- Debian:http://www.debian.org/