Website-Suche

Konfiguration eines High-Availability-Storage-Servers mit GlusterFS


12. März 2013<br /> von Lubos Rendek

Einleitung

Unabhängig davon, ob Sie ein kleines Heimnetzwerk oder ein Unternehmensnetzwerk für ein großes Unternehmen verwalten, ist die Datenspeicherung immer ein Problem. Dies kann in Bezug auf unzureichenden Speicherplatz oder eine ineffiziente Backup-Lösung liegen. In beiden Fällen kann GlusterFS das richtige Tool sein, um Ihr Problem zu beheben, da es Ihnen ermöglicht, Ihre Ressourcen sowohl horizontal als auch vertikal zu skalieren. In dieser Anleitung konfigurieren wir den verteilten und replizierten/gespiegelten Datenspeicher. Wie der Name schon sagt, können Sie mit dem verteilten Speichermodus eines GlusterFS Ihre Daten gleichmäßig auf mehrere Netzwerkknoten verteilen, während ein replizierter Modus sicherstellt, dass alle Ihre Daten über alle Netzwerkknoten gespiegelt werden.

Was ist GlusterFS?

Nachdem Sie die Einleitung gelesen haben, sollten Sie bereits eine gute Vorstellung davon haben, was GlusterFS ist. Sie können es sich als Aggregationsdienst für Ihren gesamten leeren Speicherplatz in Ihrem gesamten Netzwerk vorstellen. Es verbindet alle Knoten mit der GlusterFS-Installation über TCP oder RDMA und erstellt eine einzige Speicherressource, die den gesamten verfügbaren Speicherplatz in einem einzigen Speichervolume kombiniert ( verteilter Modus ) oder verwendet das Maximum an verfügbarem Speicherplatz auf allen Notizen, um Ihre Daten zu spiegeln (replizierter Modus). Daher besteht jedes Volume aus mehreren Knoten, die in der Terminologie von GlusterFS als Bricks bezeichnet werden.

Vorläufige Annahmen

Obwohl GlusterFS auf jeder Linux-Distribution installiert und verwendet werden kann, wird in diesem Artikel hauptsächlich Ubuntu Linux verwendet. Sie sollten jedoch in der Lage sein, diese Anleitung auf jeder Linux-Distribution wie RedHat, Fedora, SuSe usw. zu verwenden. Der einzige Teil, der anders sein wird, ist der Installationsprozess von GlusterFS.

Darüber hinaus werden in dieser Anleitung 3 Beispiel-Hostnamen verwendet:

  • storage.server1 – GlusterFS-Speicherserver
  • storage.server2 – GlusterFS Speicherserver
  • storage.client – GlusterFS-Speicher-Client

Verwenden Sie den DNS-Server oder die Datei /etc/hosts, um Ihre Hostnamen zu definieren und Ihr Szenario an diese Anleitung anzupassen.

GlusterFS Installation

Der GlusterFS-Server muss auf allen Hosts installiert sein, die Sie zu Ihrem endgültigen Speichervolume hinzufügen möchten. In unserem Fall sind es storage.server1 und storage.server2. Sie können GlusterFS als einzelnen Server und eine Clientverbindung verwenden, um als NFS-Server zu fungieren. Der wahre Wert von GlusterFS liegt jedoch darin, dass mehrere Server-Hosts verwendet werden, um als einer zu agieren. Verwenden Sie den folgenden Linux-Befehl auf beiden Servern, um den GlusterFS-Server zu installieren:

storage.server1 $ sudo apt-get install glusterfs-server

und

storage.server2 $ sudo apt-get install glusterfs-server

Die obigen Befehle installieren und starten glusterfs-server auf beiden Systemen. Vergewissern Sie sich, dass beide Server mit folgenden Optionen ausgeführt werden:

sudo service glusterfs-server status

Konfiguration des verteilten Speichers

Zuerst erstellen wir ein verteiltes GlusterFS-Volume. Im verteilten Modus verteilt GlusterFS alle Daten gleichmäßig auf alle verbundenen Bausteine. Wenn Clients z. B. die Dateien file1, file2, file3 und file4 in ein von GlusterFS eingebundenes Verzeichnis schreiben, enthält server.storage1 file1 und file2 und server.storage2 ruft file3 und file4 ab. Dieses Szenario wird anhand des folgenden Diagramms veranschaulicht.

Peer-Sonde

Zuerst müssen wir beide GlusterFS-Server dazu bringen, miteinander zu kommunizieren, was bedeutet, dass wir effektiv einen Pool vertrauenswürdiger Server erstellen.

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful 

Mit dem obigen Befehl wird storage.server2 zu einem vertrauenswürdigen Serverpool hinzugefügt. Diese Einstellungen werden auf allen verbundenen Servern repliziert, sodass Sie den obigen Befehl nicht auf anderen Servern ausführen müssen. Inzwischen steht auf beiden Servern die Peer-Konfigurationsdatei zur Verfügung, die der folgenden ähnelt:

cat /etc/glusterd/peers/951b8732-42f0-42e1-a32f-0e1c4baec4f1 
uuid=951b8732-42f0-42e1-a32f-0e1c4baec4f1
state=3
hostname1=storage.server2

Erstellen eines Speichervolumes

Als nächstes können wir beide Server verwenden, um ein neues Speichervolume zu definieren, das aus zwei Bausteinen besteht, einem für jeden Server.

storage.server1 $ sudo gluster volume create dist-vol storage.server1:/dist-data \
storage.server2:/dist-data
Creation of volume dist-vol has been successful. Please start the volume to access data.

Mit dem obigen Befehl wurde ein neues Volume mit dem Namen dist-vol erstellt, das aus zwei Bausteinen besteht. Wenn das Verzeichnis /dist-data nicht existiert, wird es mit dem obigen Befehl ebenfalls auf beiden Servern erstellt. Wie bereits erwähnt, können Sie dem Volume nur einen Baustein hinzufügen und so den ClusterFS-Server als NFS-Server fungieren lassen. Sie können überprüfen, ob Ihr neues Volume erstellt wurde, indem Sie:

sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

Speichervolume starten

Jetzt sind wir bereit, mit Ihrem neuen Band zu beginnen:

storage.server1 $ sudo gluster volume start dist-vol
Starting volume dist-vol has been successful
storage.server1 $ sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

Damit ist eine Konfiguration des GlusterFS Datenservers im verteilten Modus abgeschlossen. Das Endergebnis sollte ein neues verteiltes Volume mit dem Namen dist-vol sein, das aus zwei Bausteinen besteht.

Einrichten des Clients

Nachdem wir nun ein neues GlusterFS-Volume erstellt haben, können wir den GlusterFS-Client verwenden, um dieses Volume auf beliebigen Hosts zu mounten. Melden Sie sich beim Clienthost an, und installieren Sie den GlusteFS-Client:

storage.client $ sudo apt-get install glusterfs-client

Erstellen Sie als Nächstes einen Bereitstellungspunkt, an den Sie Ihr neues GlusterFS-Volume dist-vol mounten, z. B. export-dist:

storage.client $ sudo mkdir /export-dist

Jetzt können wir das GlusterFS-Volume dist-vol mit dem Befehl mount mounten:

storage.client $ sudo mount -t glusterfs storage.server1:dist-vol /export-dist

Alle schreien, seid bereit. Verwenden Sie den Befehl mount, um zu überprüfen, ob Sie das GlusterFS-Volume korrekt gemountet haben:

mount | grep glusterf

Testen der verteilten GlusterFS-Konfiguration

Alles ist bereit, damit wir mit einigen Tests beginnen können. Auf der Client-Seite crate 4 Dateien in das GlusterFS gemountete Verzeichnis:

storage.client $ touch /export-dist/file1 file2 file3 file4

Der GlusterFS nimmt nun alle Dateien und verteilt sie gleichmäßig auf alle Bausteine im dist-vol-Volume. Daher enthält storage.server1 Folgendes:

storage.server1 $ ls /dist-data/
file3  file4

und storage.server2 enthält:

storage.server2 $ ls /dist-data
file1  file2

Selbstverständlich können Ihre Ergebnisse auch unterschiedlich sein.

Konfiguration des replizierten Speichers

Das Verfahren zum Erstellen eines replizierten GlusterFS-Volumes ähnelt dem zuvor erläuterten verteilten Volume. Der einzige Unterschied besteht in der Art und Weise, wie das ClusterFS-Volume erstellt wird. Aber gehen wir noch einmal von vorne los:

Peer-Sonde

Zuerst müssen wir beide GlusterFS-Server dazu bringen, miteinander zu kommunizieren, was bedeutet, dass wir effektiv einen Pool vertrauenswürdiger Server erstellen.

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful

Wenn dies bereits geschehen ist, können Sie diesen Schritt überspringen.

Erstellen eines Speichervolumes

In diesem Schritt müssen wir ein Replikatvolume erstellen.

sudo gluster volume create repl-vol replica 2 \ 
storage.server1:/repl-data storage.server2:/repl-data
Creation of volume repl-vol has been successful. Please start the volume to access data.

Die grundlegende Übersetzung des obigen Befehls könnte darin bestehen, dass wir ein repliziertes Volume ( Replikat ) mit dem Namen repl-vol erstellt haben. Die Zahl 2 im Befehl gibt die Anzahl der Stripes an, was bedeutet, dass wir beim Erweitern dieses Volumens immer die Anzahl der Ziegel hinzufügen müssen, die dem Vielfachen der Stripe-Anzahl des Volumens entspricht ( 2, 4, 8, 16 usw.).

Speichervolume starten

Es ist an der Zeit, unser neues repliziertes Volume zu starten:

sudo gluster volume start repl-vol
Starting volume repl-vol has been successful

Überprüfen Sie den Status:

storage.server1 $ sudo gluster volume info repl-vol

Volume Name: repl-vol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/repl-data
Brick2: storage.server2:/repl-data

Einrichten des Clients

Die Clientkonfiguration ist identisch mit der Konfiguration des Clients für das Mounten des verteilten Volumes.

Client installieren:

storage.client $ sudo apt-get install glusterfs-client

Erstellen Sie einen Bereitstellungspunkt:

storage.client $ sudo mkdir /export-repl

Mounten Sie das GlusterFS-Volume repl-vol mit dem Befehl mount:

storage.client $ sudo mount -t glusterfs storage.server1:repl-vol /export-repl

Alle schreien, seid jetzt bereit. Verwenden Sie den Befehl mount, um zu überprüfen, ob Sie das GlusterFS-Volume korrekt gemountet haben:

mount | grep glusterf

Testen der replizierten GlusterFS-Konfiguration

Der Sinn des replizierten GlusterFS-Volumes besteht darin, dass die Daten nahtlos über alle Knoten hinweg gespiegelt werden. Beim Erstellen von Dateien in /export-repl/

touch /export-repl/file1 file2 file3 file4

Alle Dateien werden auf beiden Servern verfügbar sein:

storage.server1 $ ls /repl-data/
file1  file2  file3  file4

und

storage.server2 $ ls /repl-data/
file1  file2  file3  file4

Erweitern von GlusterFS-Volumes

Für den Fall, dass Sie Ihren Datenspeicher um zusätzliche Bausteine skalieren müssen, ist der Vorgang einfach:

sudo gluster volume add-brick rep-vol storage.server3:/repl-vol storage.server4:repl-vol /export-repl

Dadurch werden Ihrem repl-vol weitere zwei Speicherbausteine hinzugefügt. Nachdem Sie neue Steine hinzugefügt haben, müssen Sie möglicherweise das gesamte Volumen neu ausbalancieren mit:

sudo gluster volume rebalance repl-vol  fix-layout start

und synchronisieren/migrieren Sie alle Daten mit:

sudo gluster volume rebalance repl-vol  migrate-data start

Darüber hinaus können Sie den Fortschritt der Neuausrichtung mit

sudo gluster volume rebalance vol0 status

Sicherheitseinstellungen

Zusätzlich zu der oben genannten Konfiguration können Sie das gesamte Volume sicherer machen, indem Sie nur bestimmten Hosts erlauben, dem Vertrauenspool beizutreten. Wenn wir zum Beispiel möchten, dass nur der Host mit 10.1.1.10 am Volume repl-vol teilnehmen darf, verwenden wir den folgenden Linux-Befehl:

sudo gluster volume set repl-vol auth.allow 10.1.1.10

Für den Fall, dass wir das gesamte Subnetz benötigen, verwenden Sie einfach das Sternchen:

sudo gluster volume set repl-vol auth.allow 10.1.1.*

Schlussfolgerung

GlusterFS ist eine leistungsstarke GPL3-lizenzierte Software. Man kann es auch als schnelles Software-RAID 1 verwenden, indem man zwei separate physische Gerätebausteine auf dem einzelnen Host in das replizierte GlusterFS-Volume definiert. Natürlich wäre es besser, das Software-Raid für diese Aufgabe zu verwenden, aber die Möglichkeit ist immer noch vorhanden. Ich fand GlusterFS einfach zu bedienen und zu konfigurieren.

Anhang

Hier werde ich nur einige Fehler und Antworten auflisten, auf die ich beim Spielen mit GlusterFS gestoßen bin:

Falsche Anzahl von Steinen

Incorrect number of bricks supplied 1 for type REPLICATE with count 2

Wenn Sie ein Volume mit der Stripe-Anzahl 2 erstellt haben, müssen Sie zu diesem Zeitpunkt mindestens 2 zusätzliche Bricks hinzufügen.

Host storage.server1 ist kein Freund

Host storage.server1 not a friend

Fügen Sie zuerst den GlusterFS-Server zum Vertrauenspool hinzu, bevor Sie versuchen, ihn in das Volume einzuschließen.

Verwandte Artikel: