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-serverund
storage.server2 $ sudo apt-get install glusterfs-serverDie 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 statusKonfiguration 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.server2Erstellen 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-dataSpeichervolume 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-dataDamit 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-clientErstellen 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-distJetzt können wir das GlusterFS-Volume dist-vol mit dem Befehl mount mounten:
storage.client $ sudo mount -t glusterfs storage.server1:dist-vol /export-distAlle schreien, seid bereit. Verwenden Sie den Befehl mount, um zu überprüfen, ob Sie das GlusterFS-Volume korrekt gemountet haben:
mount | grep glusterfTesten 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 file4Der 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 file4und storage.server2 enthält:
storage.server2 $ ls /dist-data
file1 file2Selbstverstä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 successfulWenn 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-dataEinrichten 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-clientErstellen Sie einen Bereitstellungspunkt:
storage.client $ sudo mkdir /export-replMounten Sie das GlusterFS-Volume repl-vol mit dem Befehl mount:
storage.client $ sudo mount -t glusterfs storage.server1:repl-vol /export-replAlle schreien, seid jetzt bereit. Verwenden Sie den Befehl mount, um zu überprüfen, ob Sie das GlusterFS-Volume korrekt gemountet haben:
mount | grep glusterfTesten 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 file4Alle Dateien werden auf beiden Servern verfügbar sein:
storage.server1 $ ls /repl-data/
file1 file2 file3 file4und
storage.server2 $ ls /repl-data/
file1 file2 file3 file4Erweitern 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-replDadurch 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 startund synchronisieren/migrieren Sie alle Daten mit:
sudo gluster volume rebalance repl-vol migrate-data startDarüber hinaus können Sie den Fortschritt der Neuausrichtung mit
sudo gluster volume rebalance vol0 statusSicherheitseinstellungen
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.10Fü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 2Wenn 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 friendFügen Sie zuerst den GlusterFS-Server zum Vertrauenspool hinzu, bevor Sie versuchen, ihn in das Volume einzuschließen.

