GNU/Linux >> LINUX-Kenntnisse >  >> Fedora

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

Dieses Tutorial zeigt, wie Sie vier einzelne Speicherserver (mit Fedora 12) zu einem verteilten replizierten Speicher mit GlusterFS kombinieren. Die Knoten 1 und 2 (Replikation1) sowie 3 und 4 (Replikation2) werden sich gegenseitig spiegeln, und Replikation1 und Replikation2 werden zu einem größeren Speicherserver (Verteilung) zusammengefasst. Grundsätzlich ist dies RAID10 über das Netzwerk. Wenn Sie einen Server von Replikation1 und einen von Replikation2 verlieren, funktioniert das verteilte Volume weiterhin. 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. 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 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 nun 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 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 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:

[...]
GlusterFS-Konfigurationszusammenfassung
=========================
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 replicate1
  type cluster/replicate
  subvolumes remote1 remote2
end-volume

volume replicate2
  type cluster/replicate
  subvolumes remote3 remote4
end-volume

volume distribute
  type cluster/distribute
  subvolumes replicate1 replicate2
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...

sehen
mount

[[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] ~]#

ein

... 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
57G 9,8G 47G 17%/mnt/ glusterfs
[[email protected] ~]#

(Die Größe des verteilten Speichers wird durch Replikation1 + Replikation2 berechnet, wobei beide Replikationsvolumes so groß sind wie der kleinste Baustein.)

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 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 sowohl replikation1 als auch replikation2 nur einen Teil der Dateien/Verzeichnisse enthalten, aus denen die GlusterFS-Freigabe auf dem Client besteht, aber die Knoten, aus denen replikation1 (server1 und server2) oder replikation2 (server3 und server4) bestehen, enthalten dieselben Dateien (Spiegelung):

server1.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
-rw-r--r-- 1 root root 0 2010-02-23 15:41 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-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test5
[[email protected] ~]#

server3.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test6
[[email protected] ~]#

server4.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test6
[[email protected] ~]#

Jetzt fahren wir server1.example.com und server4.example.com herunter und fügen einige Dateien auf der GlusterFS-Freigabe auf client1.example.com hinzu/löschen sie.

server1.beispiel.com/server4.beispiel.com:

shutdown -h now

client1.beispiel.com:

rm -f /mnt/glusterfs/test5
rm -f /mnt/glusterfs/test6

Die Änderungen sollten im Verzeichnis /data/export auf server2.example.com und server3.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 2010-02-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
[[email protected] ~]#

server3.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
[[E-Mail geschützt] ~]#

Lassen Sie uns server1.example.com und server4.example.com erneut booten und einen Blick auf das Verzeichnis /data/export werfen:

server1.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test5
[[email protected] ~]#

server4.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test6
[[email protected] ~]#

Wie Sie sehen, haben server1.example.com und server4.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 /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
[[email protected] ~]#

Sehen Sie sich nun erneut das /data/export-Verzeichnis auf server1.example.com und server4.example.com an, und Sie sollten sehen, dass die Änderungen auf diese Knoten repliziert wurden:

server1.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test2
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test4
[[email protected] ~]#

server4.beispiel.com:

ls -l /data/export 

[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
[[E-Mail geschützt] ~]#

  • GlusterFS:http://www.gluster.org/
  • Fedora:http://fedoraproject.org/

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

  2. Hochverfügbarkeitsspeicher mit GlusterFS auf CentOS 7 – Spiegelung über zwei Speicherserver

  3. Verteilter Speicher über vier Speicherknoten mit GlusterFS auf Debian Lenny

  4. Verteilter replizierter Speicher über vier Speicherknoten mit GlusterFS auf Debian Lenny

  5. Striping über vier Speicherknoten mit GlusterFS auf Debian Lenny

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

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

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

Striping über vier Speicherknoten mit GlusterFS auf Fedora 12

Erstellen eines NFS-ähnlichen eigenständigen Speicherservers mit GlusterFS auf Fedora 12

Erstellen eines NFS-ähnlichen eigenständigen Speicherservers mit GlusterFS auf Fedora 13