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

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

Diese Anleitung zeigt, wie Sie einen Hochverfügbarkeitsspeicher mit zwei Speicherservern (Debian Jessie) einrichten, der GlusterFS verwendet. Jeder Speicherserver ist ein Spiegel des anderen Speicherservers, und Dateien werden automatisch über beide Speicherknoten hinweg repliziert. Das Client-System (auch Debian 8) 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.

1 Vorbemerkung

In diesem Tutorial verwende ich drei Systeme, zwei Server und einen Client:

  • server1.example.com:IP-Adresse 192.168.1.100 (Server)
  • server2.example.com:IP-Adresse 192.168.1.101 (Server)
  • client1.example.com:IP-Adresse 192.168.1.102 (Client)

Alle drei 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 drei Systemen wie folgt aussieht:

nano /etc/hosts
127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.102 client1.example.com client1


# Die folgenden Zeilen sind für IPv6-fähige Hosts wünschenswert
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 IP6-Allrouter

(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.beispiel.com/server2.beispiel.com:

Die neueste GlusterFS-Version ist als Debian-Paket von gluster.org erhältlich. Wir können es wie folgt installieren:

Wir fügen den öffentlichen Schlüssel des Debian-Repositorys von gluster.org auf beiden Servern hinzu.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Fügen Sie dann das GlusterFS-Repository hinzu (der Befehl ist eine Zeile lang!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main> /etc/apt/sources.list.d/gluster.list

und aktualisieren Sie die Repository-Liste.

apt-get-Update

Jetzt können wir die GlusterFS-Serversoftware mit apt installieren.

apt-get -y install glusterfs-server

Der Befehl

glusterfsd --version

sollte nun die gerade installierte GlusterFS-Version anzeigen (in diesem Fall 3.7.9):

[email protected]:/# glusterfsd --version
glusterfs 3.7.9 erstellt am 23. März 2016 05:24:49
Repository-Überarbeitung:git://git.gluster.com/glusterfs .git
Copyright (c) 2006-2013 Red Hat, Inc.
GlusterFS wird mit ABSOLUT KEINER GARANTIE geliefert.
Es wird an Sie lizenziert unter Ihrer Wahl der GNU Lesser
General Public License, Version 3 oder einer späteren Version (LGPLv3
oder höher), oder der GNU General Public License, Version 2 (GPLv2),
insgesamt Fällen, wie von der Free Software Foundation veröffentlicht.
[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 und server2.example.com geöffnet sind.

Glusterfs speichert seine Daten im Verzeichnis /data auf den Servern. Dieser Speicherort kann ein normales Verzeichnis sein, wenn Sie eine kleinere Installation haben, oder Sie verwenden eine separate Festplattenpartition und hängen sie als /data.

ein

Auf beiden Servern ausführen:

mkdir /data

um das Datenverzeichnis zu erstellen.

Als Nächstes müssen wir server2.example.com zum vertrauenswürdigen Speicherpool hinzufügen (bitte beachten Sie, dass ich alle GlusterFS-Konfigurationsbefehle von server1.example.com aus ausführe, Sie sie aber auch von server2.example.com aus ausführen können, da die configuration wird zwischen den GlusterFS-Knoten repliziert - 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
[email protected]:/# gluster peer probe server2.example.com
peer probe:success.
[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:1
Hostname:server2.example.com
Uuid:0f7ee46c-6a71-4a31-91d9-6076707eff95
Status:Peer im Cluster (verbunden)
[email protected]:/#

Als nächstes erstellen wir die Freigabe mit dem Namen testvol mit zwei Replikaten (bitte beachten Sie, dass die Anzahl der Replikate in diesem Fall gleich der Anzahl der Server ist, da wir die Spiegelung einrichten möchten) auf server1.example.com und server2.example.com in der /data/testvol-Verzeichnis (dieses wird erstellt, wenn es nicht existiert):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
[email protected]:/# gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
volume create:testvol:success:Bitte starten Sie das Volume, um auf die Daten zuzugreifen
[email protected]:/#

Lautstärke starten:

gluster volume start testvol
[email protected]:/# gluster volume start testvol
volume start:testvol:success
[email protected]:/#

Unser Testvolumen wurde erfolgreich gestartet.

Es ist möglich, dass der obige Befehl Ihnen mitteilt, dass die Aktion nicht erfolgreich war:

[email protected]:~# gluster volume start testvol
Starting volume testvol war nicht erfolgreich
[email protected]:~#

In diesem Fall sollten Sie die Ausgabe von...

überprüfen

server1.beispiel.com/server2.beispiel.com:

netstat -tap | grep glusterfsd

auf beiden Servern.

Wenn Sie eine solche Ausgabe erhalten...

[email protected]:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* LISTEN 8007/glusterfsd
tcp 0 0 server1.example.c:65533 server1.example.c:24007 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65531 HERGESTELLT 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.beispiel.c:65532 HERGESTELLT 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:65531 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65526 ​​ESTABLISHED 8007/glusterfsd
[email geschützt]:/#

... alles ist in Ordnung, aber wenn Sie keine Ausgabe bekommen...

[email protected]:~# netstat -tap | grep glusterfsd
[email protected]:~#

... den GlusterFS-Daemon auf dem entsprechenden Server (in diesem Fall server1.example.com) neu starten:

server2.beispiel.com:

service glusterfs-server neustarten

Überprüfen Sie dann die Ausgabe von...

netstat -tap | grep glusterfsd

... wieder auf diesem Server - es sollte jetzt so aussehen:

[email protected]:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* LISTEN 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:65532 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65526 ​​HERGESTELLT 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.beispiel.c:65525 HERGESTELLT 7852/glusterfsd
tcp 0 0 server2.example.c:65533 server2.example.c:24007 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65524 ESTABLISHED 7852/glusterfsd
[email geschützt]:/#

Nun zurück zu server1.example.com:

server1.beispiel.com:

Sie können den Status des Volumes mit dem Befehl

überprüfen
Gluster-Lautstärkeinfo
[email protected]:/# Informationen zum Gluster-Volumen
Volumenname:testvol
Typ:Replizieren
Volumen-ID:3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Status:Gestartet
Anzahl der Bricks:1 x 2 =2
Transporttyp:tcp
Bricks:
Brick1:server1.example.com:/data/testvol
Brick2:server2.example.com:/data/testvol
Optionen neu konfiguriert:
performance.readdir-ahead:on
[email protected]:/#

Standardmäßig können sich alle Clients mit dem Volume verbinden. Wenn Sie nur client1.example.com (=192.168.1.102) Zugriff gewähren möchten, führen Sie Folgendes aus:

gluster volume set testvol auth.allow 192.168.1.102
[email protected]:/# gluster volume set testvol auth.allow 192.168.1.102
volume set:success
[email protected]:/#

Bitte beachten Sie, dass Platzhalter für die IP-Adressen verwendet werden können (z. B. 192.168.*) und dass Sie mehrere IP-Adressen durch Komma getrennt angeben können (z. B. 192.168.1.102, 192.168.1.103).

Die Volume-Info sollte nun den aktualisierten Status anzeigen:

Gluster-Lautstärkeinfo

[email protected]:/# Informationen zum Gluster-Volumen

Volumenname:testvol
Typ:Replizieren
Volumen-ID:3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Status:Gestartet
Anzahl der Bricks:1 x 2 =2
Transporttyp:tcp
Bricks:
Brick1:server1.example.com:/data/testvol
Brick2:server2.example.com:/data/testvol
Optionen neu konfiguriert:
auth.allow:192.168.1.102
performance.readdir-ahead:on
[email protected]:/#

3 Einrichten des GlusterFS-Clients

client1.beispiel.com:

Auf dem Client-System fügen wir zuerst den öffentlichen Schlüssel des Debian-Repositorys von gluster.org hinzu.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Fügen Sie dann das GlusterFS-Repository hinzu (der Befehl ist eine Zeile lang!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main> /etc/apt/sources.list.d/gluster.list

und aktualisieren Sie die Repository-Liste.

apt-get-Update

Jetzt können wir den GlusterFS-Client wie folgt installieren.

apt-get -y 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 verwenden!)

Sie sollten nun die neue Freigabe in den Ausgaben von...

sehen
einhängen
[email protected]:/# mount
sysfs auf /sys geben Sie sysfs (rw,nosuid,nodev,noexec,relatime) ein
proc auf /proc geben Sie proc (rw,nosuid,nodev,noexec ,relatime)
udev auf /dev geben Sie devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)
devpts auf /dev/pts geben Sie devpts (rw,nosuid,noexec,relatime ,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=204220k,mode=755)
/dev/sda1 on /type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs auf /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs auf /dev/shm tippe tmpfs (rw,nosuid,nodev)
tmpfs auf /run/lock tippe tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs auf /sys/fs/cgroup tippe tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup auf /sys/fs/cgroup/systemd geben Sie cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd -cgroups-agent,name=systemd)
pstore auf /sys/fs/pstore geben Sie pstore (rw,nosuid,nodev,noexec,rel atime)
cgroup auf /sys/fs/cgroup/cpuset geben cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup auf /sys/fs/cgroup/cpu,cpuacct geben cgroup ( rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup auf /sys/fs/cgroup/devices Typ cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup auf / sys/fs/cgroup/freezer gib cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup auf /sys/fs/cgroup/net_cls,net_prio gib cgroup (rw,nosuid,nodev,noexec,relatime ,net_cls,net_prio)
cgroup auf /sys/fs/cgroup/blkio geben Sie cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup auf /sys/fs/cgroup/perf_event geben Sie cgroup ein (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 auf /proc/sys/fs/binfmt_misc geben Sie autofs ein (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages geben hugetlbfs (rw,relatime)
rpc_pipefs auf /run/ ein rpc_pipefs geben Sie rpc_pipefs (rw,relatime) ein
fusectl auf /sys/fs/fuse/connections geben Sie fusectl (rw,relatime)
server1.example.com:/testvol auf /mnt/glusterfs geben Sie fuse.glusterfs ein (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
[email protected]:/#

... und ...

df -h
[email protected]:/# df -h
Verwendete Dateisystemgröße Verfügbare Nutzung % Eingehängt auf
/dev/sda1 57G 1.1G 53G 2% /
udev 10M 0 10M 0% /dev
tmpfs 200 Mio. 4,6 Mio. 195 Mio. 3 % /run
tmpfs 499 Mio. 0 499 Mio. 0 % /dev/shm
tmpfs 5,0 Mio. 0 5,0 Mio. 0 % /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
server1.example.com:/testvol 57G 21G 34G 39% /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:

nano /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 verwenden!)

Um zu testen, ob Ihre modifizierte /etc/fstab funktioniert, starten Sie den Client neu:

Neustart

Nach dem Neustart sollten Sie die Freigabe in den Ausgaben von ...

finden
df -h

... und ...

einhängen

4 Testen der GlusterFS-Replikation

Lassen Sie uns nun einige Testdateien auf der GlusterFS-Freigabe erstellen:

client1.beispiel.com:

touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2

Lassen Sie uns nun das /data-Verzeichnis auf server1.example.com und server2.example.com überprüfen. Die Dateien test1 und test2 sollten auf jedem Knoten vorhanden sein:

server1.beispiel.com/server2.beispiel.com:

ls -l /data/testvol
[email protected]:/# ls -l /data/testvol/
total 0
-rw-r--r-- 2 root root 0 23. März 2016 test1
- rw-r--r-- 2 root root 0 23. März 2016 test2

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

server1.beispiel.com:

shutdown -h now

client1.beispiel.com:

touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2

Die Änderungen sollten im Verzeichnis /data/testvol auf server2.example.com sichtbar sein:

server2.beispiel.com:

ls -l /data/testvol
[email protected]:/# ls -l /data/testvol
total 8
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1
-rw-r--r-- 2 root root 0 Mär 23 08:09 test3
-rw-r--r-- 2 root root 0 Mär 23 08:09 test4
[email protected] :/#

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

server1.beispiel.com:

ls -l /data/testvol
[email protected]:/# ls -l /data/testvol
total 0
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1
-rw-r--r-- 2 root root 0 Mär 23 08:09 test3
-rw-r--r-- 2 root root 0 Mär 23 08:09 test4
[email protected] :/#

Wie Sie sehen, hat server1.example.com die Änderung automatisch synchronisiert. Falls die Änderung noch nicht synchronisiert wurde, ist dies 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 Mar 23 08:06 test1
-rw-r--r-- 1 root root 0 Mär 23 08:09 test3
-rw-r--r-- 1 root root 0 Mär 23 08:09 test4
[email protected ]:/#

  • GlusterFS:http://www.gluster.org/
  • GlusterFS-Dokumentation: http://gluster.readthedocs.org/en/latest/
  • Debian:http://www.debian.org/

Debian
  1. Hochverfügbarkeitsspeicher mit GlusterFS auf CentOS 7 – 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. Automatische Dateireplikation (Mirror) über zwei Speicherserver mit GlusterFS 3.2.x auf Ubuntu 12.10

Verteilter Speicher auf vier Speicherknoten mit GlusterFS unter CentOS 5.4

Hochverfügbarer Speicher mit GlusterFS 3.2.x auf CentOS 6.3 – Automatische Dateireplikation (Mirror) über zwei Speicherserver hinweg

Striping über vier Speicherknoten mit GlusterFS 3.2.x auf CentOS 6.3

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

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

Hochverfügbarer Speicher mit GlusterFS auf Fedora 12 – Automatische Dateireplikation (Mirror) über zwei Speicherserver