GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Striping über vier Speicherknoten mit GlusterFS auf Debian Lenny

Dieses Tutorial zeigt, wie Data Striping (Segmentierung von logisch sequentiellen Daten, wie z Lenny) mit GlusterFS. Das Client-System (auch Debian Lenny) 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.

Bitte beachten Sie, dass diese Art von Speicher keine Hochverfügbarkeits-/Fehlertoleranzfunktionen 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 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   server3.example.com     server3
192.168.0.103   server4.example.com     server4
192.168.0.104   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 der GlusterFS-Server

server1.example.com/server2.example.com/server3.example.com/server4.example.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.104 =client1.example.com):

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/server
  option auth.addr.brick.allow 192.168.0.104
  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.104,192.168.0.105).

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 remote1
  type protocol/client
  option transport-type tcp/client
  option remote-host server1.example.com
  option remote-subvolume brick
end-volume

volume remote2
  type protocol/client
  option transport-type tcp/client
  option remote-host server2.example.com
  option remote-subvolume brick
end-volume

volume remote3
  type protocol/client
  option transport-type tcp/client
  option remote-host server3.example.com
  option remote-subvolume brick
end-volume

volume remote4
  type protocol/client
  option transport-type tcp/client
  option remote-host server4.example.com
  option remote-subvolume brick
end-volume

volume stripe
  type cluster/stripe
  option block-size 1MB
  subvolumes remote1 remote2 remote3 remote4
end-volume

volume writebehind
  type performance/write-behind
  option window-size 1MB
  subvolumes stripe
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...

sehen
mount

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 auf /dev/shm tippe tmpfs (rw,nosuid,nodev)
devpts auf /dev/pts tippe 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,max_read=131072,allow_other,default_permissions )
Kunde1:~#

... und ...

df -h

client1:~#df -h
Dateisystemgröße verwendet. VERWENDEN SIE VERWENDE IGHED IGHET IST MOTTED AUF
/DEV/SDA1 29G 896M 27G 4%/
TMPFS 126M 0 126M 0%/lib/init/rw
UDEV 10m 80K 10 m 1%/Dev
TMPFS 126m 0 126m 0%/dev/shm
/etc/gusterfs/gusterfs.vol
105G 3,4G 96G 4%/mnt/ glusterfs
client1:~#

(server1.example.com, server2.example.com, server3.example.com und server4.example.com haben jeweils etwa 26 GB Speicherplatz für das GlusterFS-Dateisystem, sodass die resultierende Freigabe eine Größe von etwa 4 x 26 GB hat ( 105 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 ...

finden
df -h 

... und ...

mount

4 Testen

Lassen Sie uns nun eine große Testdatei auf der GlusterFS-Freigabe erstellen:

client1.beispiel.com:

dd if=/dev/zero of=/mnt/glusterfs/test.img bs=1024k count=1000
ls -l /mnt/glusterfs

client1:~# ls -l /mnt/glusterfs
insgesamt 1028032
-rw-r--r-- 1 root root 1048576000 2009-06-03 20:51 test.img
client1 :~#

Sehen wir uns nun das Verzeichnis /data/export auf server1.example.com, server2.example.com, server3.example.com und server4.example.com an. Sie sollten die Datei test.img auf jedem Knoten sehen, jedoch mit unterschiedlichen Größen (aufgrund von Data Striping):

server1.beispiel.com:

ls -l /data/export 

server1:~# ls -l /data/export
total 257008
-rw-r--r-- 1 root root 1045430272 2009-06-03 20:51 test.img
server1 :~#

server2.beispiel.com:

ls -l /data/export 

server2:~# ls -l /data/export
total 257008
-rw-r--r-- 1 root root 1046478848 2009-06-03 20:55 test.img
server2 :~#

server3.beispiel.com:

ls -l /data/export 

server3:~# ls -l /data/export
total 257008
-rw-r--r-- 1 root root 1047527424 2009-06-03 20:54 test.img
server3 :~#

server4.beispiel.com:

ls -l /data/export 

server4:~# ls -l /data/export
total 257008
-rw-r--r-- 1 root root 1048576000 2009-06-03 20:02 test.img
server4 :~#

  • GlusterFS:http://www.gluster.org/
  • Debian:http://www.debian.org/

Debian
  1. Hochverfügbarkeitsspeicher mit GlusterFS auf Debian 8 – Spiegelung über zwei Speicherserver

  2. Verteilter Speicher auf vier Speicherknoten mit GlusterFS 3.2.x unter Ubuntu 12.10

  3. Verteilter replizierter Speicher über vier Speicherknoten mit GlusterFS 3.2.x auf Ubuntu 12.10

  4. Striping über vier Speicherknoten mit GlusterFS 3.2.x auf Ubuntu 12.10

  5. Hochverfügbarer Speicher mit GlusterFS auf Debian Lenny - Automatische Dateireplikation über zwei Speicherserver hinweg

Hochverfügbarer Speicher mit GlusterFS 3.0.x auf Debian Squeeze – Automatische Dateireplikation über zwei Speicherserver hinweg

Hochverfügbarer Speicher mit GlusterFS 3.2.x auf Debian Wheezy – Automatische Dateireplikation (Mirror) über zwei Speicherserver

Verteilter replizierter Speicher über vier Speicherknoten mit GlusterFS 3.2.x auf CentOS 6.3

Verteilter replizierter Speicher über vier Speicherknoten mit GlusterFS auf Fedora 12

Striping über vier Speicherknoten mit GlusterFS auf Fedora 12

Verteilter Speicher über vier Speicherknoten mit GlusterFS auf Fedora 12