Dieses Tutorial zeigt, wie Sie vier einzelne Speicherserver (mit Ubuntu 12.10) 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 Ubuntu 12.10) 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)
Da wir alle Schritte dieses Tutorials mit Root-Rechten ausführen werden, können wir entweder allen Befehlen in diesem Tutorial die Zeichenfolge sudo voranstellen oder wir werden sofort root, indem wir
eingebensudo su
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 als Paket für Ubuntu 12.10 verfügbar, daher können wir es wie folgt installieren:
apt-get install glusterfs-server
Der Befehl
glusterfsd --version
sollte jetzt die gerade installierte GlusterFS-Version anzeigen (in diesem Fall 3.2.5):
[email protected]:~# glusterfsd --version
glusterfs 3.2.5 erstellt am 31. Januar 2012 07:39:58
Repository-Überarbeitung:git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc.
GlusterFS wird mit ABSOLUT KEINER GARANTIE geliefert.
Sie dürfen Kopien von GlusterFS unter den Bedingungen der weitergeben GNU General Public License.
[email protected]:~#
Wenn Sie eine Firewall verwenden, stellen Sie sicher, dass die TCP-Ports 111, 24007, 24008, 24009 (24009 + Anzahl der Bricks auf allen Volumes) auf server1.example.com, server2.example.com, server3.example.com und geöffnet sind server4.beispiel.com.
Als nächstes müssen wir server2.example.com, server3.example.com und server4.example.com zum vertrauenswürdigen Speicherpool hinzufügen (bitte beachten Sie, dass ich alle GlusterFS-Konfigurationsbefehle von server1.example.com aus ausführe, aber Sie können als Führen Sie sie gut von server2.example.com oder server3.example.com oder server4.example.com aus, da die Konfiguration zwischen den GlusterFS-Knoten repliziert wird - stellen Sie nur sicher, dass Sie die richtigen Hostnamen oder IP-Adressen verwenden):
server1.beispiel.com:
Führen Sie auf server1.example.com
aus
Gluster-Peer-Probe server2.example.com
Gluster-Peer-Probe server3.example.com
Gluster-Peer-Probe server4.example.com
Die Ausgabe sollte wie folgt aussehen:
[email protected]:~# gluster peer probe server2.example.com
Prüfung erfolgreich
[email protected]:~#
Der Status des vertrauenswürdigen Speicherpools sollte jetzt ungefähr so aussehen:
gluster peer status
[email protected]:~# Gluster-Peer-Status
Anzahl der Peers:3
Hostname:server2.example.com
Uuid:600ff607-f7fd-43f6-af8d-419df703376d
Status:Peer im Cluster (verbunden)
Hostname:server3.example.com
Uuid:1d6a5f3f-c2dd-4727-a050-0431772cc381
Status:Peer im Cluster (verbunden)
Hostname:server4.example.com
Uuid:0bd9d445-0b5b-4a91-be6f-02b13c41d5d6
Status:Peer im Cluster (verbunden)
[email protected]:~#
Als nächstes erstellen wir die verteilte replizierte Freigabe namens testvol mit zwei Repliken (bitte beachten Sie, dass die Anzahl der Repliken in diesem Fall die Hälfte der Anzahl der Server ist, da wir eine verteilte Replikation einrichten möchten) auf server1.example.com, server2.example.com , server3.example.com und server4.example.com im /data-Verzeichnis (dieses wird erstellt, wenn es nicht existiert):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data server3.example.com:/data server4.example.com:/data
[E-Mail-geschützt]:~# Gluster-Volume Testvol-Replikat 2 erstellen Transport TCP server1.example.com:/data server2.example.com:/data server3.example.com:/data server4.example.com:/data
Die Erstellung des Volumens testvol war erfolgreich. Bitte starten Sie das Volume, um auf die Daten zuzugreifen.
[email protected]:~#
Lautstärke starten:
gluster volume start testvol
Es ist möglich, dass der obige Befehl Ihnen mitteilt, dass die Aktion nicht erfolgreich war:
[email protected]:~# gluster volume start testvol
Das Starten von volume testvol war nicht erfolgreich
[email protected]:~#
In diesem Fall sollten Sie die Ausgabe von...
überprüfenserver1.example.com/server2.example.com/server3.example.com/server4.example.com:
netstat -tap | grep glusterfsd
auf beiden Servern.
Wenn Sie eine solche Ausgabe erhalten...
[email protected]:~# netstat -tap | grep glusterfsd
tcp 0 0*:24009*:*Hören 1110 /glusterfsd
TCP 0 0 localhost.localdom:1019 localhost.localdo:24007 gegründet 1110 /glusterfsd
[E -Mail -Protected]:~ #
... alles ist in Ordnung, aber wenn Sie keine Ausgabe bekommen...
[E-Mail-geschützt]:~# netstat -tap | grep glusterfsd
[email protected]:~#
[E-Mail-geschützt]:~# netstat -tap | grep glusterfsd
[email protected]:~#
[E-Mail-geschützt]:~# netstat -tap | grep glusterfsd
[email protected]:~#
... starten Sie den GlusterFS-Daemon auf dem entsprechenden Server (in diesem Fall server2.example.com, server3.example.com und server4.example.com) neu:
server2.example.com/server3.example.com/server4.example.com:
/etc/init.d/glusterfs-server restart
Überprüfen Sie dann die Ausgabe von...
netstat -tap | grep glusterfsd
... wieder auf diesen Servern - es sollte jetzt so aussehen:
[email protected]:~# netstat -tap | grep glusterfsd
tcp 0 0*:24009*:*Hören 1152 /glusterfsd
TCP 0 0 localhost.localdom:1018 localhost.localdo:24007 gegründet 1152 /glusterfsd
[E -Mail -Protected]:~ #
[email protected]:~# netstat -tap | grep glusterfsd
tcp 0 0*:24009*:*Hören 1311 /glusterfsd
tcp 0 0 localhost.localdom:1018 localhost.localdo:24007 etabliert 1311 /glusterfsd
[E -Mail -Protected]:~ #
[email protected]:~# netstat -tap | grep glusterfsd
tcp 0 0*:24009*:*Hören 1297 /glusterfsd
TCP 0 0 localhost.localdom:1019 localhost.localdo:24007 gegründet 1297 /glusterfsd
[E -Mail -Protected]:~ #
Nun zurück zu server1.example.com:
server1.beispiel.com:
Sie können den Status des Volumes mit dem Befehl
überprüfengluster volume info
[email protected]:~# gluster volume info
Volume-Name:testvol
Typ:Distributed-Replicate
Status:Gestartet
Anzahl der Bausteine:2 x 2 =4
Transporttyp:tcp
Bausteine:
Bausteine:
/>Brick1:server1.example.com:/data
Brick2:server2.example.com:/data
Brick3:server3.example.com:/data
Brick4:server4.example. com:/data
[E-Mail-geschützt]:~#
Standardmäßig können sich alle Clients mit dem Volume verbinden. Wenn Sie nur client1.example.com (=192.168.0.104) Zugriff gewähren möchten, führen Sie Folgendes aus:
gluster volume set testvol auth.allow 192.168.0.104
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).
Die Volume-Info sollte nun den aktualisierten Status anzeigen:
gluster volume info
[email protected]:~# gluster volume info
Volume-Name:testvol
Typ:Distributed-Replicate
Status:Gestartet
Anzahl der Bausteine:2 x 2 =4
Transporttyp:tcp
Bausteine:
Bausteine:
/>Brick1:server1.example.com:/data
Brick2:server2.example.com:/data
Brick3:server3.example.com:/data
Brick4:server4.example. com:/data
Optionen neu konfiguriert:
auth.allow:192.168.0.104
[email protected]:~#
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
Das ist es! Jetzt können wir das GlusterFS-Dateisystem mit dem folgenden Befehl in /mnt/glusterfs einhängen:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
(Anstelle von server1.example.com können Sie im obigen Befehl auch server2.example.com oder server3.example.com oder server4.example.com verwenden!)
Sie sollten nun die neue Freigabe in den Ausgaben von...
sehenmount
[email protected]:~# mount
/dev/mapper/server5-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid, nodev)
sysfs auf /sys geben Sie sysfs (rw,noexec,nosuid,nodev) ein
fusectl auf /sys/fs/fuse/connections geben fusectl (rw)
none auf /sys/kernel /debug Typ debugfs (rw)
keine auf /sys/kernel/security Typ securityfs (rw)
udev auf /dev Typ devtmpfs (rw,mode=0755)
devpts auf /dev/ pts tippe devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run tippe tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock geben Sie tmpfs (rw,noexec,nosuid,nodev,size=5242880)
keine auf /run/shm geben Sie tmpfs (rw,nosuid,nodev)
/dev/sda1 auf /boot geben Sie ein ext2 (rw)
server1.example.com:/testvol 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
Dateisystem Größe Verwendet Avail Use% Gemountet auf
/dev/mapper/server5-root
29G 1.1G 27G 4 % /
udev 238m 4,0K 238m 1%/Dev
TMPFS 99m 212K 99m 1%/Lauf
Keine 5,0 m 0 5,0 m 0%/run/lock
Keine 247m 0 247 m 0%/run/shm
/dev/sda1 228 Mio. 24 Mio. 193 Mio. 11 % /boot
server1.example.com:/testvol
58G 2.1G 53G 4 % /mnt/glusterfs
[email protected] ~#
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
[...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
(Auch hier können Sie anstelle von server1.example.com auch server2.example.com oder server3.example.com oder server4.example.com verwenden!)
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
Lassen Sie uns nun das /data-Verzeichnis auf server1.example.com, server2.example.com, server3.example.com und server4.example.com überprüfen. 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
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test5
[email protected]:~#
server2.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test5
[email protected]:~#
server3.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test6
[email protected]:~#
server4.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
-rw -r--r-- 1 root root 0 2012-12-17 15:49 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 auf server2.example.com und server3.example.com sichtbar sein:
server2.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
[E-Mail-geschützt]:~#
server3.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
[email geschützt]:~#
Lassen Sie uns server1.example.com und server4.example.com erneut booten und einen Blick auf das Verzeichnis /data werfen:
server1.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test5
[email protected]:~#
server4.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
-rw -r--r-- 1 root root 0 2012-12-17 15:49 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 /mnt/glusterfs/
insgesamt 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
[email protected]:~#
Sehen Sie sich nun erneut das /data-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
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test1
-rw -r--r-- 1 root root 0 2012-12-17 15:49 test2
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test4
[E-Mail-geschützt]:~#
server4.beispiel.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 2012-12-17 15:49 test3
[email geschützt]:~#
5 Links
- GlusterFS:http://www.gluster.org/
- GlusterFS 3.2-Dokumentation:http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- Ubuntu:http://www.ubuntu.com/