GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

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

Dieses Tutorial zeigt, wie Sie einen Hochverfügbarkeitsspeicher mit zwei Speicherservern (CentOS 7.2) einrichten, die GlusterFS verwenden. Jeder Speicherserver ist ein Spiegel des anderen Speicherservers, und Dateien werden automatisch über beide Speicherserver repliziert. Das Client-System (auch CentOS 7.2) 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.0.100 (Server)
  • server2.example.com:IP-Adresse 192.168.0.101 (Server)
  • client1.example.com:IP-Adresse 192.168.0.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 localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100   server1.example.com     server1
192.168.0.101   server2.example.com     server2
192.168.0.102   client1.example.com     client1

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

(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 Aktivieren Sie zusätzliche Repositories

server1.example.com/server2.example.com/client1.example.com:

Zuerst importieren wir die GPG-Schlüssel für Softwarepakete:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Dann aktivieren wir das EPEL 7-Repository auf unseren CentOS-Systemen:

yum -y install epel-release
yum -y install yum-priorities

Bearbeiten Sie /etc/yum.repos.d/epel.repo...

nano /etc/yum.repos.d/epel.repo

... und fügen Sie die Zeile priority=10 zum Abschnitt [epel] hinzu:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Dann aktualisieren wir unsere bestehenden Pakete auf dem System:

yum -y update

3 Einrichten der GlusterFS-Server

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

GlusterFS ist im Repository der CentOS Storage Special Interest Group verfügbar. Installieren Sie das Repository mit diesem Befehl:

yum -y install centos-release-gluster

Installieren Sie dann den GlusterFS-Server wie folgt:

yum -y install glusterfs-server

Erstellen Sie die Systemstartlinks für den Gluster-Daemon und starten Sie ihn:

systemctl enable glusterd.service
systemctl start glusterd.service

Der Befehl

glusterfsd --version

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

[[email protected] ~]# glusterfsd --version
glusterfs 3.7.12 built on Jun 24 2016 14:11:19
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

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.

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.

Der Status des vertrauenswürdigen Speicherpools sollte jetzt ungefähr so ​​aussehen:

gluster peer status
[[email protected] ~]# gluster peer status
Number of Peers: 1
Hostname: server2.example.com
Uuid: 582e10da-aa1b-40b8-908c-213f16f57fe5
State: Peer in Cluster (Connected)

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 das /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 force
[[email protected] ~]# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
volume create: testvol: success: please start the volume to access data
[[email protected] ~]#

Lautstärke starten:

gluster volume start testvol

Das Ergebnis sollte sein:

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

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 has been unsuccessful
[[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 0.0.0.0:49152 0.0.0.0:* LISTEN 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49148 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49148 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49150 server1.example.c:24007 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49142 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49149 ESTABLISHED 22880/glusterfsd
[[email protected] ~]#

... 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 server2.example.com) neu starten:

server2.beispiel.com:

systemctl restart glusterd.service

Ü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 0.0.0.0:49152 0.0.0.0:* LISTEN 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49140 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49149 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49143 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49142 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49150 server2.example.c:24007 ESTABLISHED 10971/glusterfsd
[[email protected] ~]#

Nun zurück zu server1.example.com:

server1.beispiel.com:

Sie können den Status des Volumes mit dem Befehl

überprüfen
gluster volume info

[[email protected] ~]# Informationen zum Gluster-Volumen

Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
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

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 volume info
[[email protected] ~]# gluster volume info
Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
[[email protected] ~]#

4 Einrichten des GlusterFS-Clients

client1.beispiel.com:

Auf dem Client können wir den GlusterFS-Client wie folgt installieren:

yum -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
mount
[[email protected] ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=34,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
[[email protected] ~]#
ein

... und ...

df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 28G 1.3G 27G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 910M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/sda1 497M 192M 306M 39% /boot
tmpfs 184M 0 184M 0% /run/user/0
server1.example.com:/testvol 28G 12G 17G 41% /mnt/glusterfs
[[email protected] ~]#

Anstatt die GlusterFS-Freigabe manuell auf dem Client bereitzustellen, fügen Sie den Mount-Befehl zur Datei „/etc/rc.local“ hinzu. Ich werde es nicht zu /etc/fstab hinzufügen, da rc.local immer ausgeführt wird, nachdem das Netzwerk hochgefahren ist, was für ein Netzwerkdateisystem erforderlich ist

Öffnen Sie /etc/rc.local und fügen Sie die folgende Zeile an:

nano /etc/rc.local
[...]
/usr/sbin/mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Auch hier können Sie anstelle von server1.example.com auch server2.example.com verwenden!)

Um zu testen, ob Ihre geänderte /etc/rc.local funktioniert, starten Sie den Client neu:

reboot

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

finden
df -h

... und ...

mount

5 Testen

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
[[email protected] ~]# ls -l /data
total 0
-rw-r--r--. 2 root root 0 Jul 1 2016 test1
-rw-r--r--. 2 root root 0 Jul 1 2016 test2
[[email protected] ~]

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 Ausführung der Befehle kann einige Zeit in Anspruch nehmen, da der Glusterfs zu Server2 wechselt, nachdem er Server1 nicht mehr erreichen kann. Wir können hier die Fehlertoleranz des Systems sehen, da wir immer noch an unserer Datenspeicherfreigabe arbeiten können, wenn Server1 offline ist. Die Änderungen sollten im Verzeichnis /data auf server2.example.com sichtbar sein:

server2.beispiel.com:

ls -l /data
[[email protected] ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4

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

server1.beispiel.com:

ls -l /data
[[email protected] ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test2
[[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 /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4
[[email protected] ~]#

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

server1.beispiel.com:

ls -l /data
[[email protected] ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4
[[email protected] ~]#

  • GlusterFS:http://www.gluster.org/
  • GlusterFS 3.2-Dokumentation:http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
  • CentOS:http://www.centos.org/

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

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

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

  4. Automatische Dateireplikation (Mirror) über zwei Speicherserver 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ügbarkeitsspeicher mit GlusterFS auf Debian 8 – Spiegelung über zwei Speicherserver

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

Striping über vier Speicherknoten mit GlusterFS auf Fedora 12

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