One place for hosting & domains

      GlusterFS

      Erstellen eines redundanten Speicherpools mit GlusterFS unter Ubuntu 20.04


      Eine frühere Version dieses Tutorials wurde von Justin Ellingwood verfasst.

      Einführung

      Single Points of Failure stellen bei der Speicherung kritischer Daten ein beträchtliches Risiko dar. Während sich mit vielen Datenbanken und anderer Software Daten im Kontext einer einzelnen Anwendung verteilen lassen, arbeiten andere Systeme auf der Ebene des Dateisystems, um sicherzustellen, dass Daten beim Schreiben auf Festplatte jedes Mal auch an einen anderen Ort kopiert werden.

      GlusterFS ist ein Network-Attached-Storage-Dateisystem (NAS), mit dem Sie Speicherressourcen verschiedener Geräte bündeln können. So lassen sich mehrere Speichergeräte, die auf unterschiedliche Computer verteilt sind, als eine leistungsfähigere Einheit nutzen. Außerdem bietet Ihnen GlusterFS die Möglichkeit, verschiedenartige Speicherkonfigurationen einzurichten, von denen viele funktionell RAID-Leveln ähneln. Zum Beispiel können Sie Daten auf verschiedenen Knoten im Cluster stripen oder für eine höhere Datenverfügbarkeit Redundanz implementieren.

      Ziele

      In diesem Leitfaden erstellen Sie ein redundantes geclustertes Speicherarray, auch als verteiltes Dateisystem oder (wie in der GlusterFS-Dokumentation) als Trusted Storage Pool bezeichnet. Damit erhalten Sie Funktionen, die einer über das Netzwerk gespiegelten RAID-Konfiguration ähneln: Jeder unabhängige Server enthält eine eigene Kopie der Daten, sodass Ihre Anwendungen auf eine beliebige Kopie zugreifen können. Dadurch lässt sich die Leselast besser verteilen.

      Dieser redundante GlusterFS-Cluster wird aus zwei Ubuntu 20.04-Servern bestehen. Er wird sich ähnlich wie ein NAS-Server mit gespiegeltem RAID verhalten. Dann werden Sie auf den Cluster über einen dritten Ubuntu 20.04-Server zugreifen, der als GlusterFS-Client konfiguriert ist.

      Anmerkung zur sicheren Ausführung von GlusterFS

      Wenn Sie einem GlusterFS-Volume Daten hinzufügen, werden diese Daten mit jedem Gerät im Speicherpool, in dem das Volumen gehostet wird, synchronisiert. Dieser Datenverkehr zwischen Knoten wird standardmäßig nicht verschlüsselt, d. h. es besteht das Risiko, dass er von bösartigen Akteuren abgefangen wird.

      Wenn Sie GlusterFS in der Produktion verwenden möchten, wird daher empfohlen, das Dateisystem in einem isolierten Netzwerk auszuführen. Sie könnten GlusterFS beispielsweise so einrichten, dass es in einer Virtual Private Cloud (VPC) oder mit einem VPN zwischen den einzelnen Knoten ausgeführt wird.

      Wenn Sie GlusterFS in DigitalOcean bereitstellen möchten, können Sie es in einem isolierten Netzwerk einrichten, indem Sie Ihre Serverinfrastruktur einer DigitalOcean Virtual Private Cloud hinzufügen. Details zur entsprechenden Einrichtung finden Sie in unserer VPC-Produktdokumentation.

      Voraussetzungen

      Um diesem Tutorial zu folgen, benötigen Sie drei Server, auf denen Ubuntu 20.04 ausgeführt wird. Jeder dieser Server sollte über einen Nicht-root-Benutzer mit Administratorberechtigungen und eine mit UFW konfigurierte Firewall verfügen. Folgen Sie dazu unserem Leitfaden für die Ersteinrichtung des Servers für Ubuntu 20.04.

      Anmerkung: Wie im Abschnitt „Ziele“ erwähnt, wird dieses Tutorial Sie durch die Konfiguration von zwei Ubuntu-Servern als Server in einem Speicherpool und dem dritten Server als Client begleiten; diesen werden Sie für Zugriff auf die beiden Speicherknoten verwenden.

      Aus Gründen der Einfachheit wird sich das Tutorial auf diese Computer mit folgenden Hostnamen beziehen:

      Hostname Rolle im Speicherpool
      gluster0 Server
      gluster1 Server
      gluster2 Client

      Befehle, die entweder auf gluster0 oder gluster1 ausgeführt werden müssen, weisen einen blauen bzw. roten Hintergrund auf:

      Befehle, die nur auf dem Client (gluster2) ausgeführt werden müssen, haben einen grünen Hintergrund:

      Befehle, die auf mehr als einem Computer ausgeführt werden können oder müssen, weisen einen grauen Hintergrund auf:

      Schritt 1 — Konfigurieren der DNS-Auflösung auf jedem Computer

      Das Erstellen einer Auflösung von Hostnamen zwischen den einzelnen Computern kann Ihnen bei der Verwaltung Ihres Gluster-Speicherpools helfen. Wenn Sie in diesem Tutorial später in einem gluster-Befehl auf einen Ihrer Computer verweisen, können Sie dies dann mit einem leicht zu merkenden Domänennamen oder sogar einem Spitznamen anstelle der jeweiligen IP-Adresse tun.

      Wenn Sie keinen freien Domänennamen haben oder einfach nur eine schnelle Einrichtung vornehmen möchten, können Sie stattdessen die Datei /etc/hosts auf den einzelnen Computern bearbeiten. Dies ist eine spezielle Datei auf Linux-Computern, in der Sie das System statisch konfigurieren können, um alle in der Datei enthaltenen Hostnamen in Form statischer IP-Adressen aufzulösen.

      Anmerkung: Wenn Sie Ihre Server zur Authentifizierung mit einer Domäne konfigurieren möchten, die Ihnen gehört, müssen Sie sich zunächst einen Domänennamen von einer Domänenregistrierungstelle wie Namecheap oder Enom verschaffen und dann die entsprechenden DNS-Einträge konfigurieren.

      Sobald Sie für jeden Server einen A-Eintrag konfiguriert haben, können Sie mit Schritt 2 fortfahren. Stellen Sie sicher, dass Sie glusterN.example.com und glusterN durch den Domänennamen ersetzen, der auf den jeweiligen im Beispielbefehl verwiesenen Server auflöst.

      Wenn Sie Ihre Infrastruktur von DigitalOcean erhalten haben, könnten Sie Ihren Domänennamen DigitalOcean hinzufügen und für jeden Ihrer Server einen eindeutigen A-Eintrag erstellen.

      Öffnen Sie die Datei mit root-Berechtigungen mit einem Texteditor Ihrer Wahl auf jedem Ihrer Computer. Wir verwenden hier nano:

      Standardmäßig wird die Datei in etwa so aussehen (mit entfernten Kommentaren):

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      Fügen Sie auf einem Ihrer Ubuntu-Server unter der lokalen Hostdefinition die IP-Adresse der einzelnen Server hinzu, gefolgt von allen Namen, die Sie verwenden möchten, um auf sie in Befehlen verweisen zu können.

      Im folgenden Beispiel erhält jeder Server einen langen Hostnamen, der auf glusterN.example.com abgestimmt ist, und einen kurzen Hostnamen, der auf glusterN abgestimmt ist. Sie können die Abschnitte glusterN.example.com und glusterN jeder Zeile in einen beliebigen Namen – oder durch einzelne Leerzeichen getrennte Namen – ändern, die Sie für den Zugriff auf einzelne Server verwenden möchten. Beachten Sie jedoch, dass in diesem Tutorial durchgehend die folgenden Beispiele verwenden werden:

      Anmerkung: Wenn Ihre Server Teil eines Infrastrukturpools vom Typ Virtual Private Cloud sind, sollten Sie in der Datei /etc/hosts die privaten IP-Adressen der einzelnen Server anstelle ihrer öffentlichen IP-Adressen verwenden.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      Wenn Sie fertig damit sind, der Datei /etc/hosts eines Computers diese neuen Zeilen hinzuzufügen, kopieren Sie die Zeilen und fügen Sie sie den /etc/hosts-Dateien auf Ihren anderen Computern hinzu. Jede /etc/hosts-Datei sollte dieselben Zeilen enthalten und die IP-Adressen Ihrer Server mit den ausgewählten Namen verknüpfen.

      Speichern und schließen Sie dann die Datei. Wenn Sie nano verwendet haben, drücken Sie STRG+X, Y und dann ENTER​​​.

      Nachdem Sie die Auflösung der Hostnamen zwischen den einzelnen Servern konfiguriert haben, können Sie Befehle leichter ausführen, wenn Sie später einen Speicherpool und ein Volume einrichten. Als Nächstes führen Sie einen weiteren Schritt aus, der auf jedem Ihrer Server abgeschlossen werden muss. Und zwar fügen Sie jedem Ihrer drei Ubuntu-Server das offizielle Personal Package Archive (PPA) des Gluster-Projekts hinzu, um dafür zu sorgen, dass Sie die neueste Version von GlusterFS installieren können.

      Schritt 2 — Einrichten von Softwarequellen auf jedem Computer

      Zwar enthalten die standardmäßigen Ubuntu 20.04-APT-Repositorys GlusterFS-Pakete, doch handelt es sich dabei zum Zeitpunkt der Verfassung dieses Dokuments nicht um die aktuellsten Versionen. Eine Möglichkeit, die neueste stabile Version von GlusterFS (zum Zeitpunkt der Verfassung dieses Dokuments Version 7.6) zu installieren, besteht darin, jedem Ihrer drei Ubuntu-Server das offizielle PPA des Gluster-Projekts hinzuzufügen.

      Fügen Sie das PPA für die GlusterFS-Pakete hinzu, indem Sie auf jedem Server folgenden Befehl ausführen:

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Drücken Sie ENTER, wenn Sie dazu aufgefordert werden, um zu bestätigen, dass Sie das PPA tatsächlich hinzufügen möchten.

      Aktualisieren Sie nach dem Hinzufügen des PPA den lokalen Paketindex der einzelnen Server. Dadurch wird sich jeder Server der neu verfügbaren Pakete bewusst:

      Nachdem Sie das offizielle PPA des Gluster-Projekts den einzelnen Servern hinzugefügt und den lokalen Paketindex aktualisiert haben, können Sie die erforderlichen GlusterFS-Pakete installieren. Da zwei Ihrer drei Computer als Gluster-Server und der dritte Computer als Client fungieren werden, müssen Sie jedoch zwei separate Installations- und Konfigurationsverfahren befolgen. Zuerst installieren und richten Sie die Serverkomponenten ein.

      Schritt 3 — Installieren von Serverkomponenten und Erstellen eines Trusted Storage Pool

      Ein Speicherpool ist eine beliebige Menge an Speicherkapazität, die aus mehr als einer Speicherquelle aggregiert wird. In diesem Schritt konfigurieren Sie zwei Ihrer Server — gluster0 und gluster1 — als Clusterkomponenten.

      Installieren Sie sowohl auf gluster0 als auch gluster1 das Paket für GlusterFS-Server, indem Sie Folgendes eingeben:

      • sudo apt install glusterfs-server

      Drücken Sie auf Aufforderung Y und dann ENTER, um die Installation zu bestätigen.

      Der Installationsprozess konfiguriert GlusterFS automatisch so, dass eine Ausführung als systemd-Dienst erfolgt. Er sorgt jedoch nicht für einen automatischen Start des Diensts oder das Aktivieren zum Ausführen zur Startzeit.

      Um glusterd (den GlusterFS-Dienst) zu starten, führen Sie den Befehl systemctl start sowohl auf gluster0 als auch gluster1 aus:

      • sudo systemctl start glusterd.service

      Führen Sie dann folgenden Befehl auf beiden Servern aus. Dadurch wird der Dienst jedes Mal gestartet, wenn der Server gestartet wird:

      • sudo systemctl enable glusterd.service

      Anschließend können Sie den Status des Diensts auf einem oder beiden Servern überprüfen:

      • sudo systemctl status glusterd.service

      Wenn der Dienst erfolgreich ausgeführt wird, erhalten Sie eine Ausgabe, die wie folgt aussieht:

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      Wenn Sie dem Leitfaden zur Ersteinrichtung des Servers gefolgt sind, haben Sie auf jedem Ihrer Computer eine Firewall mit UFW eingerichtet. Aus diesem Grund müssen Sie die Firewall für jeden Knoten öffnen, bevor Sie eine Verbindung zwischen ihnen herstellen und einen Speicherpool einrichten können.

      Der Gluster-Daemon nutzt Port 24007, sodass Sie jedem Knoten über die Firewall der einzelnen Knoten in Ihrem Speicherpool Zugriff auf den Port gewähren müssen. Führen Sie dazu folgenden Befehl auf gluster0 aus. Denken Sie daran, gluster1_ip_address in die IP-Adresse von gluster1 zu ändern:

      • sudo ufw allow from gluster1_ip_address to any port 24007

      Führen Sie dann folgenden Befehl auf gluster1 aus. Vergessen Sie auch hier nicht, gluster0_ip_address in die IP-Adresse von gluster0 zu ändern:

      • sudo ufw allow from gluster0_ip_address to any port 24007

      Außerdem müssen Sie Ihrem Clientcomputer (gluster2) Zugriff auf diesen Port gewähren. Andernfalls werden Sie später Probleme haben, wenn Sie versuchen, das Volumen bereitzustellen. Führen Sie sowohl auf gluster0 als auch gluster1 folgenden Befehl aus, um diesen Port für Ihren Clientcomputer zu öffnen:

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Um sicherzustellen, dass keine anderen Computer auf einem der Server auf den Port von Gluster zugreifen können, fügen Sie dann die folgende Rahmenregel deny sowohl gluster0 als auch gluster1 hinzu:

      Sie können nun eine Verbindung zwischen gluster0 und gluster1 herstellen. Dazu müssen Sie auf einem Ihrer Knoten den Befehl gluster peer probe ausführen. Es spielt dabei keine Rolle, welchen Knoten Sie verwenden. Das folgende Beispiel veranschaulicht die Ausführung des Befehls auf gluster0:

      • sudo gluster peer probe gluster1

      Dieser Befehl weist gluster0 im Wesentlichen an, gluster1 zu vertrauen und als Teil seines Speicherpools zu registrieren. Wenn der Test erfolgreich war, wird folgende Ausgabe zurückgegeben:

      Output

      peer probe: success

      Sie können jederzeit überprüfen, ob die Knoten miteinander kommunizieren, indem Sie auf einem der Knoten den Befehl gluster peer status ausführen. In diesem Beispiel wird er auf gluster1 ausgeführt:

      Wenn Sie diesen Befehl auf gluster1 ausführen, wird eine Ausgabe angezeigt, die wie folgt aussieht:

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      An diesem Punkt kommunizieren Ihre beiden Server miteinander und sind bereit, gemeinsam Speichervolumes zu erstellen.

      Schritt 4 — Einrichten eines Speichervolumes

      Denken Sie daran, dass das primäre Ziel dieses Tutorials in der Einrichtung eines redundanten Speicherpools besteht. Dazu richten Sie ein Volume mit Replikatfunktion ein, damit Sie mehrere Kopien Ihrer Daten speichern und verhindern können, dass Ihr Cluster einen Single Point of Failure aufweist.

      Um ein Volume zu erstellen, verwenden Sie den Befehl gluster volume create mit dieser allgemeinen Syntax:

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Das bedeuten die Argumente und Optionen des Befehls gluster volume create:

      • volume_name: Das ist der Name, mit dem Sie nach der Erstellung auf das Volume verweisen. Der folgende Beispielbefehl sorgt für die Erstellung eines Volumes namens volume1.
      • replica number_of_servers: Nach dem Namen des Volumes können Sie festlegen, welche Art von Volume Sie erstellen möchten. Denken Sie daran, dass das Ziel dieses Tutorials darin besteht, einen redundanten Speicherpool einzurichten, sodass wir den Volume-Typ replica wählen. Dies erfordert ein Argument, mit dem angegeben wird, auf wie viele Server die Daten des Volumes repliziert werden sollen (in diesem Tutorial 2).
      • domain1.com:/… und domain2.com:/…: Diese definieren die Computer und den Speicherort des Verzeichnisses der Bricks (eine GlusterFS-Bezeichnung für die grundlegende Speichereinheit des Systems), was alle Verzeichnisse auf allen Computern umfasst, die als Teil oder Kopie eines größeren Volumes dienen. So entsteht volume1. Im folgenden Beispiel wird im root-Verzeichnis beider Server ein Verzeichnis namens gluster-storage erstellt.
      • force: Diese Option sorgt für das Überschreiben aller Warnungen oder Optionen, die sonst auftreten und die Erstellung des Volumes unterbrechen würden.

      Anhand der in diesem Tutorial zuvor aufgeführten Konventionen können Sie diesen Befehl zur Erstellung eines Volumes ausführen. Beachten Sie, dass Sie den Befehl entweder auf gluster0 oder gluster1 ausführen können:

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Wenn das Volume erfolgreich erstellt wurde, erhalten Sie folgende Ausgabe:

      Output

      volume create: volume1: success: please start the volume to access data

      An diesem Punkt wurde Ihr Volume bereits erstellt, ist aber noch nicht aktiv. Sie können das Volume starten und zur Verwendung bereitstellen, indem Sie folgenden Befehl ausführen (erneut auf einem Ihrer beiden Gluster-Server):

      • sudo gluster volume start volume1

      Wenn das Volume korrekt gestartet wurde, erhalten Sie folgende Ausgabe:

      Output

      volume start: volume1: success

      Überprüfen Sie als Nächstes, ob das Volume online ist. Führen Sie auf einem Ihrer Knoten folgenden Befehl aus:

      • sudo gluster volume status

      Dadurch wird eine Ausgabe zurückgegeben, die der folgenden ähnelt:

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Laut dieser Ausgabe sind die Bricks auf beiden Servern online.

      Als letzter Schritt zur Konfiguration Ihres Volumes müssen Sie die Firewall auf beiden Servern öffnen, damit Ihr Clientcomputer in der Lage ist, sich mit dem Volume zu verbinden und das Volume bereitzustellen. Gemäß der Beispielausgabe des vorherigen Befehls wird volume1 auf beiden Computern an Port 49152 ausgeführt. Dies ist der Standardport von GlusterFS für das erste Volumen. Weitere Volumes werden also Port 49153, dann 49154 usw. verwenden.

      Führen Sie sowohl auf gluster0 als auch gluster1 folgenden Befehl aus, um gluster2 über die jeweilige Firewall Zugriff auf diesen Port zu gewähren:

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Fügen Sie dann für zusätzliche Sicherheit eine weitere deny-Rahmenregel für den Port des Volumes hinzu – sowohl auf gluster0 als auch gluster1. Dadurch wird sichergestellt, dass auf beiden Servern keine anderen Computer außer Ihrem Client auf das Volume zugreifen können:

      Nachdem Ihr Volume nun ausgeführt wird, können Sie Ihren Clientcomputer einrichten und remote nutzen.

      Schritt 5 — Installieren und Konfigurieren von Clientkomponenten

      Ihr Volume ist nun konfiguriert und zur Verwendung durch Ihren Clientcomputer verfügbar. Bevor Sie beginnen, müssen Sie jedoch das Paket glusterfs-client aus dem PPA installieren, das Sie in Schritt 1 auf Ihrem Clientcomputer eingerichtet haben. Die Abhängigkeiten dieses Pakets umfassen einige gemeinsame Bibliotheken und Übersetzermodule von GlusterFS sowie die für die Arbeit erforderlichen FUSE-Tools.

      Führen Sie folgenden Befehl auf gluster2 aus:

      • sudo apt install glusterfs-client

      Sie werden Ihr Remote-Speichervolume in Kürze auf Ihrem Clientcomputer bereitstellen. Bevor Sie dies tun können, müssen Sie einen Bereitstellungspunkt erstellen. Traditionell befindet sich dieser im Verzeichnis /mnt, doch kann jeder beliebige Ort verwendet werden.

      Erstellen Sie aus Gründen der Einfachheit auf Ihrem Clientcomputer ein Verzeichnis namens /storage-pool als Bereitstellungspunkt. Dieser Verzeichnisname beginnt mit einem Schrägstrich (/), der es im root-Verzeichnis platziert. Daher müssen Sie das Verzeichnis mit sudo-Berechtigungen erstellen:

      Jetzt können Sie das Remotevolume bereitstellen. Werfen Sie zuvor einen Blick auf die Syntax des Befehls mount, den Sie dazu verwenden werden:

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount ist ein Dienstprogramm in vielen Unix-ähnlichen Betriebssystemen. Es dient dazu, Dateisysteme (ob externe Speichergeräte wie SD-Karten bzw. USB-Sticks oder NAS-Systeme wie im Fall dieses Tutorials) im vorhandenen Dateisystem des Computers in Verzeichnissen bereitzustellen. Die von Ihnen verwendete mount-Befehlssyntax umfasst die Option -t, die drei Argumente erfordert: den Typ des Dateisystems, der bereitgestellt werden soll, das Gerät, auf dem sich das bereitzustellende Dateisystem befindet, und das Verzeichnis auf dem Client, in dem Sie das Volume bereitstellen möchten.

      Beachten Sie, dass das Geräteargument in dieser Beispielsyntax auf einen Hostnamen verweist, gefolgt von einem Doppelpunkt und dann dem Namen des Volumes. GlusterFS abstrahiert die tatsächlichen Speicherverzeichnisse auf jedem Host, was bedeutet, dass dieser Befehl nicht das Verzeichnis /gluster-storage, sondern vielmehr das Volume volume1 bereitstellt.

      Beachten Sie außerdem, dass Sie nur ein Mitglied des Speicherclusters angeben müssen. Dies kann einer der beiden Knoten sein, da der GlusterFS-Dienst sie als einen Computer behandelt.

      Führen Sie auf Ihrem Clientcomputer (gluster2) folgenden Befehl aus, um das Volume im von Ihnen erstellten Verzeichnis /storage-pool bereitzustellen:

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Führen Sie danach den Befehl df aus. Dadurch wird für Dateisysteme, auf die der aufrufende Benutzer Zugriff hat, der verfügbare Speicherplatz angezeigt:

      Dieser Befehl zeigt an, dass das GlusterFS-Volume am richtigen Ort bereitgestellt wurde:

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

      Jetzt können Sie mit der Prüfung fortfahren, ob alle Daten, die Sie in das Volume auf Ihrem Client schreiben, wie erwartet auf Ihren Serverknoten repliziert werden.

      Schritt 6 — Testen von Redundanzfunktionen

      Nachdem Sie Ihren Client zur Verwendung des Speicherpools und Volumes eingerichtet haben, können Sie seine Funktionalität testen.

      Navigieren Sie auf Ihrem Clientcomputer (gluster2) zum im vorherigen Schritt definierten Bereitstellungspunkt:

      Erstellen Sie dann einige Testdateien. Der folgende Befehl erstellt in Ihrem Speicherpool zehn separate leere Dateien:

      • sudo touch file_{0..9}.test

      Wenn Sie sich die zuvor auf den einzelnen Speicherhosts definierten Speicherverzeichnisse ansehen, werden Sie feststellen, dass alle diese Dateien in jedem System vorhanden sind.

      Auf gluster0:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Und auch auf gluster1:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Wie diese Ausgaben zeigen, wurden auch die Testdateien, die Sie dem Client hinzugefügt haben, in beide Knoten geschrieben.

      Sollte jemals einer der Knoten in Ihrem Speichercluster ausfallen, kann es vorkommen, dass er nicht mehr mit dem Speicherpool synchron ist, wenn Änderungen am Dateisystem vorgenommen werden. Wenn der Knoten wieder online ist, können Sie durch Ausführung eines Lesevorgangs am Bereitstellungspunkt des Clients den Knoten auf fehlende Dateien aufmerksam machen:

      Nachdem Sie verifiziert haben, dass Ihr Speichervolumen korrekt bereitgestellt wurde und Sie Daten an beiden Computer im Cluster replizieren können, können Sie den Zugriff auf den Speicherpool sperren.

      Schritt 7 — Beschränken der Redundanzfunktionen

      Gegenwärtig kann sich jeder Computer ganz ohne Einschränkungen mit Ihrem Speichervolume verbinden. Sie können das ändern, indem Sie die Option auth.allow festlegen, um die IP-Adressen der einzelnen Clients zu definieren, die Zugriff auf das Volume haben sollen.

      Wenn Sie die Konfiguration /etc/hosts verwenden, werden die Namen, die Sie für die Server festgelegt haben, nicht korrekt geroutet. Sie müssen stattdessen eine statische IP-Adresse verwenden. Wenn Sie jedoch DNS-Einträge verwenden, wird hier der Domänenname, den Sie konfiguriert haben, funktionieren.

      Führen Sie auf einem Ihrer beiden Speicherknoten (gluster0 oder gluster1) folgenden Befehl aus:

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Wenn der Befehl erfolgreich abgeschlossen wird, gibt er folgende Ausgabe zurück:

      Output

      volume set: success

      Wenn Sie die Einschränkung irgendwann entfernen möchten, können Sie Folgendes eingeben:

      • sudo gluster volume set volume1 auth.allow *

      Dadurch werden wieder Verbindungen von beliebigen Computern aus möglich. Dies ist nicht sicher, kann aber für die Fehlerbehebung nützlich sein.

      Wenn Sie über mehrere Clients verfügen, können Sie ihre IP-Adressen oder Domänennamen gleichzeitig angeben (je nachdem, ob Sie /etc/hosts oder die Auflösung von DNS-Hostnamen verwenden), getrennt durch Kommas:

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Ihr Speicherpool ist nun konfiguriert, gesichert und einsatzbereit. Als Nächstes werden Sie einige Befehle kennen lernen, die Ihnen helfen, Informationen über den Status Ihres Speicherpools zu erhalten.

      Schritt 8 — Abrufen von Informationen über den Speicherpool mit GlusterFS-Befehlen

      Wenn Sie bestimmte Einstellungen für Ihren GlusterFS-Speicher ändern, können Sie den Überblick darüber verlieren, welche Optionen Sie zur Verfügung haben, welche Volumes live sind und welche Knoten mit einzelnen Volumes verknüpft sind.

      Es gibt verschiedene Befehle, die auf Ihren Knoten verfügbar sind, mit denen Sie diese Daten abrufen und mit Ihrem Speicherpool interagieren können.

      Wenn Sie Informationen über die einzelnen Volumes wünschen, führen Sie den Befehl gluster volume info aus:

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      Um Informationen über Peers zu erhalten, mit denen dieser Knoten verbunden ist, können Sie Folgendes eingeben:

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Wenn Sie genaue Informationen zur Ausführung einzelner Knoten wünschen, können Sie ein Profil für ein Volume erstellen, indem Sie Folgendes eingeben:

      • sudo gluster volume profile volume_name start

      Nach erfolgreicher Ausführung dieses Befehls können Sie die gesammelten Informationen abrufen, indem Sie Folgendes eingeben:

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Führen Sie wie zuvor gezeigt den Befehl gluster volume status aus, um eine Liste aller zu GlusterFS zugehörigen Komponenten zu erhalten, die auf den einzelnen Knoten ausgeführt werden:

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Wenn Sie Ihre GlusterFS-Speichervolumes verwalten möchten, kann es eine gute Idee sein, die GlusterFS-Konsole zu nutzen. Dadurch können Sie mit Ihrer GlusterFS-Umgebung interagieren, ohne zunächst sudo gluster eingeben zu müssen:

      Daraufhin wird eine Eingabeaufforderung angezeigt, in der Sie Ihre Befehle eingeben können. help (Hilfe) ist eine gute Methode, um sich einen Überblick zu verschaffen:

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      Führen Sie anschließend exit aus, um die Gluster-Konsole zu verlassen:

      Nun können Sie damit beginnen, GlusterFS mit der nächsten Anwendung zu integrieren.

      Zusammenfassung

      Durch Absolvieren dieses Tutorials haben Sie ein redundantes Speichersystem eingerichtet, mit dem Sie gleichzeitig auf zwei separate Server schreiben können. Das kann für verschiedene Anwendungen nützlich sein und dafür sorgen, dass Ihre Daten verfügbar bleiben, auch wenn ein Server ausfällt.



      Source link

      Cómo crear un grupo de almacenamiento redundante con GlusterFS en Ubuntu 20.04


      Justin Ellingwood escribió una versión anterior de este tutorial.

      Introducción

      Al almacenar datos cruciales, tener un punto único de fallo es muy arriesgado. Si bien muchas bases de datos y otros software permiten extender los datos en el contexto de una sola aplicación, otros sistemas pueden operar a nivel del sistema de archivos para garantizar que los datos se copien a otra ubicación cuando se escribe en disco.

      GlusterFS es un sistema de archivos de almacenamiento conectado a la red que le permite agrupar recursos de almacenamiento de varias máquinas. A su vez, esto permite manipular diversos dispositivos de almacenamiento que se distribuyen entre muchas computadoras como una unidad única y más potente. GlusterFS también faculta la creación de diferentes tipos de configuraciones de almacenamiento, muchas de las cuales son similares en cuanto a funcionalidad a los niveles de RAID. Por ejemplo, puede segmentar datos en diferentes nodos del clúster o implementar la redundancia para obtener una mejor disponibilidad de datos.

      Objetivos

      En esta guía, creará una matriz de almacenamiento agrupada y redundante, también conocida como sistema de archivos distribuidos, o como se la denomina en la documentación de GlusterFS, un grupo de almacenamiento de confianza. Esto proporcionará una funcionalidad similar a una configuración RAID en espejo a través de la red: cada servidor independiente contendrá una copia propia de los datos, lo que permitirá que sus aplicaciones puedan acceder a cualquier copia, y de este modo, contribuirá a la distribución de la carga de lectura.

      Este clúster redundante de GlusterFS consistirá en dos servidores Ubuntu 20.04. Actuará de manera similar a un servidor NAS con RAID en espejo. Después, podrá acceder al clúster desde un tercer servidor Ubuntu 20.04 que se configurará para funcionar como cliente de GlusterFS.

      Nota sobre cómo ejecutar GlusterFS de manera segura

      Cuando se agregan datos a un volumen de GlusterFS, esos datos se sincronizan con cada máquina del grupo de almacenamiento donde se aloja el volumen. Por defecto, el tráfico entre nodos no está cifrado, lo que significa que existe un riesgo de que agentes malintencionados los intercepten.

      Debido a esto, si planea utilizar GlusterFS con fines productivos, se recomienda que lo ejecute en una red aislada. Por ejemplo, podría configurarlo para ejecutar en una nube privada virtual (VPC) o con una VPN que se ejecute entre cada nodo.

      Si planea implementar GlusterFS en DigitalOcean, puede configurarlo en una red aislada agregando la infraestructura de su servidor a una nube privada virtual de DigitalOcean. Para obtener información sobre cómo configurarlo, consulte nuestra documentación sobre productos de VPC.

      Requisitos previos

      Para seguir este tutorial, necesitará tres servidores que ejecuten Ubuntu 20.04. Cada servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con UFW. Para configurar esto, siga la guía de configuración inicial de servidores para Ubuntu 20.04.

      Nota: Como se indica en la sección de objetivos, este tutorial le servirá como guía para configurar dos de los servidores Ubuntu para que actúen como servidores en su grupo de almacenamiento y el otro para actuar como cliente, el cual utilizará para acceder a estos nodos.

      Para mayor claridad, en este tutorial se hará referencia a estas máquinas con los siguientes nombres de host:

      Nombre de host Función en el grupo de almacenamiento
      gluster0 Servidor
      gluster1 Servidor
      gluster2 Cliente

      Los comandos que deban ejecutarse en gluster0 o gluster1 aparecerán sobre fondos azul y rojo, respectivamente:

      Los comandos que solo deban ejecutarse en el cliente (gluster2) aparecerán sobre un fondo verde:

      Los comandos que puedan o deban ejecutarse en más de una máquina aparecerán sobre un fondo gris:

      Paso 1: Configurar la resolución DNS en cada máquina

      Configurar algún tipo de resolución de nombres de host entre cada equipo puede ayudar a administrar el grupo de almacenamiento de Gluster. De esta manera, cuando en este tutorial tenga que hacer referencia a una de las máquinas en un comando gluster, puede utilizar un nombre de dominio fácil de recordar o incluso un sobrenombre en vez de las respectivas direcciones IP.

      Si no tiene un nombre de dominio extra, o si solo quiere realizar una configuración rápida, en su lugar puede modificar el archivo /etc/hosts en cada computadora. Este es un archivo especial en las máquinas Linux en el que puede configurar de forma estática el sistema para que establezca cualquier nombre de host que figure en el archivo como direcciones IP estáticas.

      Nota: Si quiere configurar los servidores para que se autentiquen con un dominio de su propiedad, primero deberá obtener un nombre de dominio de un registrador de dominios (como Namecheap o Enom) y configurar los registros DNS apropiados.

      Una vez que haya configurado un registro A para cada servidor, puede ir directamente al paso 2. A medida que sigue esta guía, asegúrese de sustituir glusterN.example.com y glusterN con el nombre de dominio que se convierte al servidor correspondiente al que se hace referencia en el comando de ejemplo.

      Si obtuvo la infraestructura de DigitalOcean, podría agregar el nombre de dominio a DigitalOcean y, luego, configurar un registro A único para cada uno de los servidores.

      Con su editor de texto preferido, abra este archivo con privilegios root en cada una de las máquinas. En este caso, utilizaremos nano:

      De forma predeterminada, el archivo tendrá el siguiente aspecto sin los comentarios:

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      En uno de los servidores Ubuntu, agregue la dirección IP de cada servidor seguida de cualquier nombre que quiera utilizar para referirse a ellos en los comandos que se encuentran debajo de la definición del host local.

      En el siguiente ejemplo, se proporciona a cada servidor un nombre de host largo que coincide con glusterN.example.com y uno corto que coincide con glusterN. Puede cambiar la parte de glusterN.example.com y glusterN de cada línea por cualquier nombre (o nombres separados por espacios individuales) que le gustaría utilizar para acceder a cada servidor. Sin embargo, tenga en cuenta que a lo largo de este tutorial se utilizarán los siguientes ejemplos:

      Nota: Si los servidores son parte de un grupo de infraestructura de la nube privada virtual, en el archivo /etc/hosts debería utilizar la dirección IP privada de cada servidor en vez de sus IP públicas.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      Cuando haya terminado de agregar estas nuevas líneas en el archivo /etc/hosts de una máquina, cópielas y agréguelas en los archivos /etc/hosts de las otras máquinas. Cada archivo /etc/hosts debería contener las mismas líneas, lo que vincula las direcciones IP de los servidores con los nombres que seleccionó.

      Guarde y cierre cada archivo cuando haya terminado. Si utiliza nano, podrá hacerlo presionando CTRL + X, Y y, luego, ENTER.

      Ahora que ha configurado la resolución de nombres de host entre cada servidor, será más sencillo ejecutar los comandos más adelante cuando configure un grupo y un volumen de almacenamiento. A continuación, realizará otro paso que debe completarse en cada uno de los servidores. Concretamente, agregará el archivo de paquetes personal (PPA) oficial del proyecto Gluster a cada uno de los tres servidores Ubuntu para garantizar que pueda instalar la versión más reciente de GlusterFS.

      Paso 2: Configurar las fuentes de software en cada máquina

      Si bien los repositorios APT predeterminados de Ubuntu 20.04 contienen paquetes de GlusterFS, al momento de escribir este artículo, no se trata de las versiones más recientes. Una forma de instalar la versión estable más reciente de GlusterFS (versión 7.6, al momento de redactar este artículo) es agregar el PPA oficial del proyecto Gluster a cada uno de los tres servidores Ubuntu.

      Ejecute el siguiente comando en cada servidor para agregar el PPA para los paquetes de GlusterFS:

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Cuando se le solicite, presione ENTER para confirmar que realmente quiere agregar el PPA.

      Tras agregar el PPA, actualice el índice local de paquetes de cada servidor. Esto hará que cada servidor sea informado sobre la presencia de los nuevos paquetes disponibles:

      Una vez que agregó el PPA oficial del proyecto Gluster a cada servidor y que actualizó el índice local de paquetes, está listo para instalar los paquetes necesarios de GlusterFS. Sin embargo, dado que dos de las tres máquinas actuarán como servidores de Gluster y la otra como cliente, existen dos procedimientos de instalación y configuración distintos. Primero, instalará y configurará los componentes del servidor.

      Paso 3: Instalar los componentes del servidor y crear un grupo de almacenamiento de confianza

      Un grupo de almacenamiento es toda capacidad de almacenamiento agregada a partir de dos o más recursos de almacenamiento. En este paso, configurará dos de los servidores (gluster0 y gluster1) como componentes del clúster.

      Escriba lo siguiente para instalar el paquete de servidor de GlusterFS en gluster0 y gluster1:

      • sudo apt install glusterfs-server

      Cuando se le solicite, presione Y y, luego, ENTER para confirmar la instalación.

      De manera automática, el proceso de instalación configura GlusterFS para que se ejecute como un servicio systemd. Sin embargo, no inicia automáticamente el servicio ni lo habilita para ejecutarse en el arranque.

      Para iniciar glusterd, el servicio de GlusterFS, ejecute el siguiente comando systemctl start en gluster0 y gluster1:

      • sudo systemctl start glusterd.service

      Luego, ejecute el siguiente comando en ambos servidores. Esto permitirá que el servicio se inicie cuando arranque el servidor:

      • sudo systemctl enable glusterd.service

      A continuación, puede verificar el estado del servicio en uno o en ambos servidores:

      • sudo systemctl status glusterd.service

      Si el servicio está activo y en ejecución, recibirá un resultado similar al siguiente:

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      Suponiendo que cumplió con los requisitos previos de la guía de configuración inicial de servidores, habrá configurado un firewall con UFW en cada una de las máquinas. Debido a esto, deberá abrir el firewall en cada nodo para poder establecer comunicaciones entre ellos y crear un grupo de almacenamiento.

      El demonio de Gluster utiliza el puerto 24007, por lo que deberá permitir que cada nodo tenga acceso a ese puerto a través del firewall de cada uno de los otros nodos en su grupo de almacenamiento. Para hacerlo, ejecute el siguiente comando en gluster0. Recuerde cambiar gluster1_ip_address por la dirección IP de gluster1:

      • sudo ufw allow from gluster1_ip_address to any port 24007

      Y ejecute el siguiente comando en gluster1. Una vez más, asegúrese de cambiar gluster0_ip_address por la dirección IP de gluster0:

      • sudo ufw allow from gluster0_ip_address to any port 24007

      También deberá permitir que su máquina cliente (gluster2) tenga acceso a este puerto. De lo contrario, surgirán problemas más adelante cuando intente montar el volumen. Ejecute el siguiente comando tanto en gluster0 como en gluster1 para habilitar el acceso de su máquina cliente a este puerto:

      • sudo ufw allow from gluster2_ip_address to any port 24007

      A continuación, para garantizar que ninguna otra máquina pueda acceder al puerto de Gluster en ninguno de los servidores, agregue una norma general deny tanto en gluster0 como en gluster1:

      Ahora está listo para establecer la comunicación entre gluster0 y gluster1. Para hacerlo, deberá ejecutar el comando gluster peer probe en uno de los nodos. No importa qué nodo utilice, pero en el siguiente ejemplo se muestra la ejecución del comando en gluster0:

      • sudo gluster peer probe gluster1

      Básicamente, este comando le indica a gluster0 que confíe en gluster1 y que lo registre como parte de su grupo de almacenamiento. Si el sondeo es exitoso, devolverá el siguiente resultado:

      Output

      peer probe: success

      Para verificar en cualquier momento la comunicación entre los nodos, puede ejecutar el comando gluster peer status en cualquiera de los dos. En este ejemplo, se ejecuta en gluster1:

      Si ejecuta este comando desde gluster1, mostrará el resultado de la siguiente manera:

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      En este momento, los dos servidores están comunicados y listos para crear volúmenes de almacenamiento entre sí.

      Paso 4: Crear un volumen de almacenamiento

      Recuerde que el objetivo principal de este tutorial es crear un grupo de almacenamiento redundante. Para ello, configurará un volumen con funcionalidad de réplica, lo que le permitirá mantener varias copias de los datos y evitar que el clúster tenga un punto único de fallo.

      Utilizará el comando gluster volume create con la siguiente sintaxis general para crear un volumen:

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      A continuación, se describe el significado de los argumentos y las opciones del comando gluster volume create:

      • volume_name: Este es el nombre que utilizará para referirse al volumen una vez que lo haya creado. El siguiente comando de ejemplo crea un volumen denominado volume1.
      • replica number_of_servers: Después del nombre del volumen, puede definir el tipo de volumen que quiere crear. Recuerde que el objetivo de este tutorial es crear un grupo de almacenamiento redundante, por lo que utilizaremos el tipo de volumen replica. Se requiere un argumento que indique en cuántos servidores se replicarán los datos del volumen (en este caso, 2).
      • domain1.com:/… y domain2.com:/…: Estos definen las máquinas y la ubicación del directorio de los bricks (ladrillos) que constituirán volume1. Brick o ladrillo es el término que se utiliza en GlusterFS para hacer referencia a su unidad básica de almacenamiento, que incluye cualquier directorio o máquina que sirva como parte o copia de un volumen mayor. El siguiente ejemplo creará un directorio denominado gluster-storage en el directorio raíz de ambos servidores.
      • force: Esta opción anulará cualquier advertencia u opción que de otro modo podría surgir y detener la creación del volumen.

      Siguiendo las convenciones que se establecieron anteriormente en este tutorial, puede ejecutar este comando para crear un volumen. Tenga en cuenta que puede ejecutarlo desde gluster0, o bien desde gluster1:

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Si el volumen se creó correctamente, obtendrá el siguiente resultado:

      Output

      volume create: volume1: success: please start the volume to access data

      En este punto, el volumen se ha creado pero aún no está activo. Puede iniciar el volumen y habilitarlo para su uso ejecutando el siguiente comando, desde cualquiera de los servidores de Gluster:

      • sudo gluster volume start volume1

      Si el volumen se inició correctamente, verá el siguiente resultado:

      Output

      volume start: volume1: success

      A continuación, compruebe que el volumen está en línea. Ejecute el siguiente comando desde cualquiera de los dos nodos:

      • sudo gluster volume status

      Esto devolverá un resultado similar al siguiente:

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Según este resultado, los ladrillos en ambos servidores están en línea.

      Como paso final para configurar el volumen, deberá abrir firewall en ambos servidores para que su máquina cliente pueda conectarse y montar el volumen. El resultado de muestra del comando anterior muestra que volume1 se está ejecutando en el puerto 49152 en ambas máquinas. Este es el puerto predeterminado de GlusterFS para su volumen inicial, y el siguiente volumen que cree utilizará el puerto 49153, y el siguiente el puerto 49154, y así sucesivamente.

      Ejecute el siguiente comando en gluster0 y gluster1 para permitir que gluster2 acceda a este puerto a través del firewall de cada uno:

      • sudo ufw allow from gluster2_ip_address to any port 49152

      A continuación, para tener una capa de seguridad adicional, agregue otra norma general deny para el puerto del volumen tanto en gluster0 como en gluster1. Esto garantizará que, en cualquiera de los servidores, solo su máquina cliente pueda acceder al volumen:

      Ahora que el volumen está activo y en ejecución, puede configurar la máquina cliente y comenzar a utilizarla de forma remota.

      Paso 5: Instalar y configurar los componentes del cliente

      El volumen ahora está configurado y disponible para que la máquina cliente lo utilice. Sin embargo, antes de comenzar, debe instalar el paquete glusterfs-client desde el PPA que configuró en su máquina cliente en el paso 1. Las dependencias de este paquete incluyen algunas de las bibliotecas y los módulos de traducción comunes de GlusterFS, como así también las herramientas de FUSE necesarias para que funcione.

      Ejecute el siguiente comando en gluster2:

      • sudo apt install glusterfs-client

      En breve, montará el volumen de almacenamiento remoto en el equipo cliente. Sin embargo, antes debe crear un punto de montaje. Generalmente, se ubica en el directorio /mnt, pero puede utilizarse cualquier lugar conveniente.

      Para simplificar, cree un directorio denominado /storage-pool en la máquina cliente para que sirva como el punto de montaje. El nombre de este directorio comienza con una barra diagonal (/) que lo ubica en el directorio raíz, por lo que deberá crearlo con privilegios sudo:

      Ahora puede montar el volumen remoto. Antes, sin embargo, observe la sintaxis del comando mount que utilizará para hacerlo:

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount es una utilidad que se encuentra en muchos sistemas operativos similares a Unix. Se utiliza para montar sistemas de archivos (desde dispositivos de almacenamiento externos, como tarjetas SD o dispositivos USB hasta almacenamiento conectado a la red, como es el caso de este tutorial) a los directorios en el sistema de archivos existente de la máquina. La sintaxis del comando mount que utilizará incluye la opción -t, que requiere tres argumentos: el tipo de sistema de archivos que se montará, el dispositivo en el que se encuentra el sistema de archivos que se montará y el directorio del cliente donde se montará el volumen.

      Observe que en este ejemplo de sintaxis, el argumento del dispositivo indica hacia un nombre de host seguido por dos puntos y el nombre del volumen. GlusterFS abstrae los directorios de almacenamiento reales en cada host, lo que significa que este comando no busca montar el directorio /gluster-storage, sino el volumen volume1.

      También tenga en cuenta que solo debe especificar un miembro del clúster de almacenamiento. Puede ser cualquiera de los nodos, ya que el servicio de GlusterFS los manipula como una sola máquina.

      Ejecute el siguiente comando en la máquina cliente (gluster2) para montar el volumen al directorio /storage-pool que creó:

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Luego, ejecute el comando df. Esto mostrará la cantidad de espacio de disco disponible para los sistemas de archivos a los que tiene acceso el usuario que lo invoca:

      Este comando mostrará que el volumen de GlusterFS está montado en la ubicación correcta:

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

      Ahora, puede avanzar y comprobar que cualquier dato que escriba en el volumen del cliente se copie a los nodos de su servidor como se esperaba.

      Paso 6: Poner a prueba las características de redundancia

      Ahora que ha configurado el cliente para que utilice el grupo y el volumen de almacenamiento, puede probar su funcionalidad.

      En la máquina cliente (gluster2), diríjase al punto de montaje que definió en el paso anterior:

      A continuación, cree algunos archivos de prueba. El siguiente comando crea diez archivos vacíos diferentes en el grupo de almacenamiento:

      • sudo touch file_{0..9}.test

      Si revisa los directorios de almacenamiento que definió anteriormente en cada host de almacenamiento, descubrirá que todos estos archivos están presentes en cada sistema.

      En gluster0:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Del mismo modo, en gluster1:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Como muestran estos resultados, los archivos de prueba que agregó al cliente también se escribieron en ambos nodos.

      Si en algún momento uno de los nodos del clúster de almacenamiento se desconecta, podría perder la sincronización con el grupo de almacenamiento si se realizan cambios en el sistema de archivos. Realizar una operación de lectura en el punto de montaje del cliente una vez que el nodo vuelva a estar en línea, alertará al nodo para que obtenga los archivos que faltan:

      Una vez que ha verificado que el volumen de almacenamiento se montó correctamente y que puede replicar los datos en ambas máquinas del clúster, puede bloquear el acceso al grupo de almacenamiento.

      Paso 7: Restringir las características de redundancia

      En este momento, cualquier computadora puede conectarse al volumen de almacenamiento sin ninguna restricción. Para modificar esto configure la opción auth.allow, que define las direcciones IP de los clientes que deberían tener acceso al volumen.

      Si está utilizando la configuración /etc/hosts, los nombres que estableció para cada servidor no se redirigirán correctamente. En su lugar, debe utilizar una dirección IP estática. Por otro lado, si utiliza registros DNS, el nombre de dominio que haya configurado funcionará aquí.

      Ejecute el siguiente comando en cualquiera de los nodos de almacenamiento (gluster0 o gluster1):

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Si el comando se completa correctamente, devolverá el siguiente resultado:

      Output

      volume set: success

      Si en algún momento necesita eliminar la restricción, puede escribir:

      • sudo gluster volume set volume1 auth.allow *

      Esto volverá a permitir las conexiones desde cualquier máquina. Esto no es seguro, pero puede ser útil para depurar problemas.

      Si tiene varios clientes, puede especificar sus direcciones IP o nombres de dominio al mismo tiempo (según esté utilizando la resolución de nombres de host /etc/hosts o DNS), separados por comas:

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Ahora el grupo de almacenamiento está configurado, protegido y listo para su uso. A continuación, aprenderá algunos comandos que le ayudarán a obtener información sobre el estado del grupo de almacenamiento.

      Paso 8: Obtener información sobre el grupo de almacenamiento con comandos de GlusterFS

      Cuando comienza a modificar algunas de las opciones de configuración del almacenamiento de GlusterFS, puede resultar confuso saber qué opciones tiene disponibles, qué volúmenes están en vivo y qué nodos se asocian con cada volumen.

      Existen diversos comandos disponibles en los nodos que permiten obtener estos datos e interactuar con el grupo de almacenamiento.

      Si quiere obtener información sobre cada uno de los volúmenes, ejecute el comando gluster volume info:

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      Asimismo, para obtener información sobre cualquier punto al que esté conectado este nodo, puede escribir:

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Si quiere obtener información detallada sobre el rendimiento de cada nodo, puede crear el perfil de un volumen escribiendo lo siguiente:

      • sudo gluster volume profile volume_name start

      Cuando se complete el comando, escriba lo siguiente para obtener la información que se recopiló:

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Tal como se mostró antes, utilice el comando gluster volume status para obtener una lista de todos los componentes asociados de GlusterFS que se ejecutan en cada uno de los nodos:

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Si va a administrar los volúmenes de almacenamiento de GlusterFS, puede ser recomendable ir a la consola de GlusterFS. Esto le permitirá interactuar con el entorno de GlusterFS sin necesidad de anteponer sudo gluster a todo:

      Esto le mostrará un mensaje en el que podrá escribir los comandos. El comando help puede ayudarlo a encaminarse:

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      Cuando haya terminado, ejecute exit para salir de la consola de Gluster:

      Con esto, está listo para comenzar a integrar GlusterFS con su próxima aplicación.

      Conclusión

      Al final de este tutorial, tendrá un sistema de almacenamiento redundante que le permitirá escribir simultáneamente en dos servidores separados. Esto puede resultar útil para varias aplicaciones y puede garantizar que los datos estén disponibles incluso cuando un servidor falla.



      Source link

      Comment créer un pool de stockage redondant en utilisant GlusterFS sur Ubuntu 20.04


      Une version antérieure de ce tutoriel a été écrite par Brennan Bearnes.

      Introduction

      Lorsque vous stockez des données critiques, avoir un seul point de défaillance est très risqué. Alors que beaucoup de bases de données et autres logiciels vous permettent de répartir les données dans le contexte d’une seule application, d’autres systèmes peuvent fonctionner au niveau du système de fichiers pour s’assurer que les données sont copiées à un autre endroit chaque fois qu’elles sont écrites sur le disque.

      GlusterFS est un système de fichiers de stockage connecté en réseau qui vous permet de mettre en commun les ressources de stockage de plusieurs machines. Cela vous permet de traiter plusieurs périphériques de stockage répartis sur plusieurs ordinateurs comme une seule unité plus puissante. GlusterFS vous donne également la liberté de créer différents types de configurations de stockage, dont beaucoup sont fonctionnellement similaires aux niveaux RAID. Par exemple, vous pouvez répartir les données sur différents nœuds du cluster, ou vous pouvez mettre en place une redondance pour une meilleure disponibilité des données.

      Objectifs

      Dans ce guide, vous créerez un tableau de stockage redondant en grappe, également connu sous le nom de système de fichiers distribués ou, comme il est mentionné dans la documentation GlusterFS, un pool de stockage fiable. Cela fournira des fonctionnalités similaires à une configuration RAID en miroir sur le réseau : chaque serveur indépendant contiendra sa propre copie des données, ce qui permettra à vos applications d’accéder à l’une ou l’autre des copies, contribuant ainsi à répartir votre charge de lecture.

      Ce cluster GlusterFS redondant sera composé de deux serveurs Ubuntu 20.04. I agira comme un serveur NAS avec RAID en miroir. Vous accéderez ensuite au cluster à partir d’un troisième serveur Ubuntu 20.04 configuré pour fonctionner comme client GlusterFS.

      Une note sur l’exécution sécurisée de GlusterFS

      Lorsque vous ajoutez des données à un volume GlusterFS, les données sont synchronisées à chaque machine du pool de stockage où le volume est hébergé. Ce trafic entre les nœuds n’est pas crypté par défaut, ce qui signifie qu’il y a un risque qu’il puisse être intercepté par des acteurs malveillants.

      Pour cette raison, si vous souhaitez utiliser GlusterFS en production, il est recommandé de l’exécuter sur un réseau isolé. Par exemple, vous pouvez le configurer pour qu’il fonctionne sur un nuage privé virtuel (VPC) ou avec un VPN fonctionnant entre chacun des nœuds.

      Si vous prévoyez de déployer GlusterFS sur DigitalOcean, vous pouvez le configurer comme un réseau isolé en ajoutant votre infrastructure de serveur à un nuage privé virtuel DigitalOcean. Pour plus de détails sur la manière de le mettre en place, consultez notre documentation sur les produits VPC.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de trois serveurs fonctionnant sous Ubuntu 20.04. Chaque serveur doit avoir un utilisateur non root avec des privilèges administratifs et un pare-feu configuré avec UFW. Pour le mettre en place, suivez notre guide de configuration initiale du serveur pour Ubuntu 20.04.

      Remarque : Comme mentionné à la section Objectifs, ce tutoriel vous guidera à travers la configuration de deux de vos serveurs Ubuntu pour qu’ils agissent comme des serveurs dans votre pool de stockage et le dernier pour qu’il agisse comme un client que vous utiliserez pour accéder à ces nœuds.

      Pour plus de clarté, ce tutoriel fera référence à ces machines avec les noms d’hôte suivants :

      Nom d’hôte Rôle dans le pool de stockage
      gluster0 Serveur
      gluster1 Serveur
      gluster2 Client

      Les commandes qui devraient être exécutées sur gluster0 ou gluster1 auront respectivement des arrière-plans bleu et rouge :

      Les commandes qui ne devraient être exécutées que sur le client (gluster2) auront un arrière-plan vert :

      Les commandes qui peuvent ou devraient être exécutées sur plusieurs machines auront un arrière-plan gris :

      Étape 1 – Configuration de la résolution DNS sur chaque machine

      La mise en place d’une sorte de résolution de nom d’hôte entre chaque ordinateur peut aider à gérer votre pool de stockage Gluster. De cette façon, chaque fois que vous devez référencer une de vos machines dans une commande gluster plus loin dans ce tutoriel, vous pourrez le faire avec un nom de domaine facile à mémoriser ou même un surnom au lieu de leurs adresses IP respectives.

      Si vous n’avez pas de nom de domaine de rechange, ou si vous souhaitez simplement configurer quelque chose rapidement, vous pouvez à la place modifier le fichier /etc/hosts sur chaque ordinateur. Il s’agit d’un fichier spécial sur les machines Linux où vous pouvez configurer le système de manière statique pour résoudre tous les noms d’hôte contenus dans le fichier en adresses IP statiques.

      Remarque : Si vous souhaitez configurer vos serveurs pour qu’ils s’authentifient avec un domaine qui vous appartient, vous devrez d’abord obtenir un nom de domaine à partir d’un registraire de domaine — comme Namecheap ou Enom — et configurer les enregistrements DNS appropriés.

      Une fois que vous avez configuré un enregistrement A pour chaque serveur, vous pouvez passer à l’étape 2. En suivant ce guide, assurez-vous de remplacer glusterN.example.com et gluster<^>N<^> par le nom de domaine qui se résout au serveur respectif référencé dans la commande example.

      Si vous avez obtenu votre infrastructure auprès de DigitalOcean, vous pouvez ajouter votre nom de domaine à DigitalOcean puis configurer un enregistrement A unique pour chacun de vos serveurs.

      À l’aide de votre éditeur de texte préféré, ouvrez ce fichier avec des privilèges root sur chacune de vos machines. Ici, nous utiliserons nano :

      Par défaut, le fichier ressemblera à quelque chose comme celui-ci avec les commentaires supprimés :

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      Sur l’un de vos serveurs Ubuntu, ajoutez l’adresse IP de chaque serveur, suivi des noms que vous souhaitez utiliser pour les référencer dans des commandes sous la définition de l’hôte locale.

      Dans l’exemple suivant, chaque serveur a un long nom d’hôte qui s’aligne sur glusterN.example.com et un nom court qui s’aligne sur glusterN. Vous pouvez changer les portions de glusterN.example.com et de glusterN de chaque ligne en n’importe quel nom — ou des noms séparés par des espaces uniques — que vous souhaitez utiliser pour accéder à chaque serveur. Notez, cependant, que ce tutoriel utilisera ces exemples tout au long :

      Remarque : Si vos serveurs font partie d’un pool d’infrastructure VPC, vous devez utiliser l’adresse IP privée de chaque serveur dans le fichier /etc/hosts plutôt que leurs IP publiques.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      Lorsque vous avez terminé d’ajouter ces nouvelles lignes au fichier /etc/hosts d'une machine, copiez-les et ajoutez-les aux fichiers /etc/hosts de vos autres machines. Chaque fichier /etc/hosts devrait contenir les mêmes lignes, reliant les adresses IP de vos serveurs aux noms que vous avez sélectionnés.

      Enregistrez et fermez chaque fichier lorsque vous avez terminé. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis ENTER.

      Maintenant que vous avez configuré la résolution de nom d’hôte entre chacun de vos serveurs, il sera plus facile d’exécuter des commandes plus tard lorsque vous configurez un pool de stockage et un volume. Ensuite, vous passerez par une autre étape qui doit être réalisée sur chacun de vos serveurs. À savoir, ajouter l’archive personnelle officielle des paquets du projet Gluster (PPA) à chacun de vos trois serveurs Ubuntu pour vous assurer que vous pouvez installer la dernière version de GlusterFS.

      Étape 2 – Configuration des sources logicielles sur chaque machine

      Bien que les référentiels Ubuntu 20.04 APT par défaut contiennent des paquets GlusterFS, au moment où nous écrivons ces lignes, ce ne sont pas les versions les plus récentes. Une façon d’installer la dernière version stable de GlusterFS (version 7.6 au moment où nous écrivons ces lignes) consiste à ajouter le PPA officiel du projet Gluster à chacun de vos trois serveurs Ubuntu.

      Ajoutez le PPA pour les paquets GlusterFS en exécutant la commande suivante sur chaque serveur :

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Appuyez sur ENTER lorsque vous êtes invité à confirmer que vous souhaitez réellement ajouter le PPA.

      Après avoir ajouté le PPA, actualisez l’index local des paquets de chaque serveur. Cela permettra à chaque serveur de prendre connaissance des nouveaux paquets disponibles :

      Après avoir ajouté le PPA officiel du projet Gluster sur chaque serveur et mis à jour l’index local des paquets, vous êtes prêt à installer les paquets GlusterFS nécessaires. Cependant, comme deux de vos trois machines agira comme serveurs Gluster et l’autre comme client, il existe deux procédures distinctes d’installation et de configuration. Tout d’abord, vous installerez et configurez les composants du serveur.

      Étape 3 – Installation des composants du serveur et création d’un pool de stockage de confiance

      Un pool de stockage est toute quantité de capacité de stockage agrégée à partir de plusieurs ressources de stockage. Au cours de cette étape, vous configurez deux de vos serveurs — gluster0 et gluster1 — comme les composants du cluster.

      Sur gluster0 et gluster1, installez le paquet de serveur GlusterFS en saisissant :

      • sudo apt install glusterfs-server

      Lorsque vous y êtes invité, appuyez sur Y et ensuite ENTER pour confirmer l’installation.

      Le processus d’installation configure automatiquement GlusterFS pour qu’il fonctionne comme un service systemd. Cependant, il ne démarre pas automatiquement le service ou ne lui permet pas de s’exécuter au démarrage.

      Pour démarrer glusterd, le service GlusterFS, exécutez la commande systemctl start suivante sur gluster0 et gluster1 :

      • sudo systemctl start glusterd.service

      Ensuite, lancez la commande suivante sur les deux serveurs. Cela permettra au service de démarrer chaque fois que le serveur démarre :

      • sudo systemctl enable glusterd.service

      Ensuite, vous pouvez vérifier l’état du service sur l’un ou les deux serveurs :

      • sudo systemctl status glusterd.service

      Si le service est opérationnel, vous recevrez un résultat comme celui-ci :

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      En supposant que vous ayez suivi le guide initial des prérequis de configuration du serveur, vous aurez mis en place un pare-feu avec UFW sur chacune de vos machines. À cause de cela, vous devrez ouvrir le pare-feu sur chaque nœud avant de pouvoir établir des communications entre eux et créer un pool de stockage.

      Le démon Gluster utilise le port 24007, vous devrez donc autoriser chaque nœud à accéder à ce port à travers le pare-feu de chaque autres nœuds de votre pool de stockage. Pour ce faire, lancez la commande suivante sur gluster0. N’oubliez pas de remplacer gluster1_ip_address par l’adresse IP de gluster1 :

      • sudo ufw allow from gluster1_ip_address to any port 24007

      Et lancez la commande suivante sur gluster1. Encore une fois, veillez à remplacer gluster0_ip_address par l’adresse IP de gluster0 :

      • sudo ufw allow from gluster0_ip_address to any port 24007

      Vous devrez également autoriser votre machine client (gluster2) à accéder à ce port. Sinon, vous rencontrerez des problèmes plus tard lorsque vous essayerez de monter le volume. Exécutez la commande suivante sur gluster0 et gluster1 pour ouvrir ce port à votre machine cliente :

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Ensuite, pour s’assurer qu’aucune autre machine ne soit puisse accéder au port de Gluster sur l’un ou l’autre des serveurs, ajoutez la règle deny absolue suivante à la fois à gluster0 et gluster1 :

      Vous êtes maintenant prêt à établir la communication entre gluster0 et gluster1. Pour ce faire, vous devrez exécuter la commande gluster peer probe sur l’un de vos nœuds. Peu importe le nœud que vous utilisez, mais l’exemple suivant montre la commande en cours sur gluster0 :

      • sudo gluster peer probe gluster1

      En gros, cette commande indique à gluster0 de faire confiance à gluster1 et de l’enregistrer comme faisant partie de son pool de stockage. Si le sondage est réussi, il renverra la sortie suivante :

      Output

      peer probe: success

      Vous pouvez vérifier que les nœuds communiquent à tout moment en exécutant la commande gluster peer status sur l’un ou l’autre . Dans cet exemple, il est exécuté sur gluster1 :

      Si vous lancez cette commande à partir de gluster1, il affichera la sortie suivante :

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      À ce stade, vos deux serveurs communiquent et sont prêts à créer des volumes de stockage entre eux.

      Étape 4 – Créer un volume de stockage

      Rappelons que l’objectif principal de ce tutoriel est de créer un pool de stockage redondant. À cette fin, vous allez mettre en place un volume avec une fonctionnalité de réplication, vous permettant de conserver plusieurs copies de vos données et d’éviter à votre cluster d’avoir un seul point de défaillance.

      Pour créer un volume, vous utiliserez la commande gluster volume create avec cette syntaxe générale :

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Voici ce que ce signifient les arguments et les options cette commande gluster volume create signifient :

      • volume_name : C’est le nom que vous utiliserez pour faire référence au volume après sa création. L’exemple de commande suivant crée un volume nommé volume1.
      • réplica number_of_servers: : À la suite du nom du volume, vous pouvez définir le type de volume que vous souhaitez créer. Rappelons que l’objectif de ce tutoriel est de créer un pool de stockage redondant, nous utiliserons donc le type de volume replica. Cela exige un argument indiquant sur combien de serveurs les données du volume seront répliquées (2 dans le cas de ce tutoriel).
      • domain1.com:/… et domain2.com:/… : Ces éléments définissent les machines et l’emplacement du répertoire des briques — le terme de GlusterFS pour son unité de stockage de base, qui comprend tous les répertoires sur toutes les machines qui servent comme partie ou copie d’un volume plus important — qui constitueront le volume1. L’exemple suivant créera un répertoire nommé gluster-storage dans le répertoire racine des deux serveurs.
      • force : Cette option remplacera les avertissements ou les options qui autrement pourraient apparaître et arrêter la création du volume.

      En suivant les conventions établies précédemment dans ce tutoriel, vous pouvez exécuter cette commande pour créer un volume. Notez que vous pouvez l’exécuter à partir de gluster0 ou de gluster1 :

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Si le volume a été créé avec succès, vous recevrez la sortie suivante :

      Output

      volume create: volume1: success: please start the volume to access data

      À ce stade, votre volume a été créé, mais il n’est pas encore actif. Vous pouvez démarrer le volume et le rendre disponible pour l’utilisation en exécutant la commande suivante, toujours à partir de l’un de vos serveurs Gluster :

      • sudo gluster volume start volume1

      Vous recevrez cette sortie si le volume a été démarré correctement :

      Output

      volume start: volume1: success

      Ensuite, vérifiez que le volume est en ligne. Exécutez la commande suivante à partir de l’un de vos nœuds :

      • sudo gluster volume status

      Cela renverra la sortie semblable à celle-ci :

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Sur la base de cette sortie, les briques sur les deux serveurs sont en ligne.

      En guise de dernière étape pour configurer votre volume, vous devrez ouvrir le pare-feu sur les deux serveurs pour que votre machine cliente puisse se connecter et monter le volume. Selon l’exemple de sortie de la commande précédente, volume1 tourne sur le port 49152 sur les deux machines. C’est le port par défaut de GlusterFS pour son volume initial, et le prochain volume que vous crérez utilisera le port 49153, puis 49154, etc.

      Exécutez la commande suivante sur gluster0 et gluster1 pour autoriser gluster2 à accéder à ce port à travers le pare-feu respectif de chacun :

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Ensuite, pour une couche de sécurité supplémentaire, ajoutez une autre règle deny absolue pour le port du volume sur gluster0 et gluster1. Cela garantira qu’aucune machine autre que votre machine cliente ne puisse accéder au volume sur l’un ou l’autre des serveurs :

      Maintenant que votre volume est opérationnel, vous pouvez configurer votre machine cliente et commencer à l’utiliser à distance.

      Étape 5 — Installation et configuration des composants du client

      Votre volume est maintenant configuré et disponible pour être utilisé par votre machine cliente. Mais, avant de commencer, vous devez installer le paquet glusterfs-client à partir du PPA que vous avez mis en place à l’étape 1 sur votre machine cliente. Les dépendances de ce paquet comprennent certaines des bibliothèques et modules de traduction communs de GlusterFS, ainsi que les outils FUSE nécessaires à son fonctionnement.

      Exécutez la commande suivante sur gluster2 :

      • sudo apt install glusterfs-client

      Vous allez bientôt monter votre volume de stockage à distance sur votre ordinateur client. Cependant, avant de pouvoir le faire, vous devez créer un point de montage. Traditionnellement, cela se fait dans le répertoire /mnt, mais vous pouvez l’utiliser n’importe où.

      Pour plus de simplicité, créez un répertoire nommé /storage-pool sur votre machine cliente pour servir de point de montage. Ce nom de répertoire commence par une barre (/) oblique qui le place dans le répertoire racine, vous devrez donc le créer avec des privilèges sudo :

      Vous pouvez maintenant monter le volume distant. Cependant, consultez d’abord la syntaxe de la commande mount que vous utiliserez pour le faire :

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount est un utilitaire que l’on trouve dans plusieurs systèmes d’exploitation de type Unix. Il est utilisé pour monter des systèmes de fichiers — n’importe quoi depuis des périphériques de stockage externes, comme les cartes SD ou les clés USB, à du stockage connecté comme dans le cas de ce tutoriel — sur des répertoires du système de fichiers existant de la machine. La syntaxe de la commande mount que vous utiliserez comprend l’option -t, qui nécessite trois arguments : le type de système de fichiers à monter, le périphérique où le système de fichiers à monter peut être trouvé, et le répertoire sur le client où vous allez monter le volume.

      Notez que dans cet exemple, l’argument périphérique pointe vers un nom d’hôte suivi de deux points et ensuite le nom du volume. GlusterFS extrait les répertoires de stockage réels sur chaque hôte, ce qui signifie que cette commande ne cherche pas à monter le répertoire /gluster-storage, mais plutôt le volume volume1.

      Notez également que vous n’avez à spécifier qu’un seul membre du cluster de stockage. Cela peut être n’importe quel nœud, puisque le service GlusterFS les traite comme une seule machine.

      Exécutez la commande suivante sur votre machine cliente (gluster2) pour monter le volume sur le répertoire /storage-pool que vous avez créé :

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Ensuite, exécutez la commande df. Cela affichera la quantité d’espace disque disponible pour les systèmes de fichiers auxquels l’utilisateur qui l’invoque a accès :

      Cette commande montrera que le volume GlusterFS est monté au bon endroit :

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

      Vous pouvez maintenant passer au test pour vérifier que toutes les données que vous écrivez sur le volume de votre client sont répliquées sur les nœuds de votre serveur, comme prévu.

      Étape 6 — Tester les fonctionnalités de redondance

      Maintenant que vous avez mis en place votre client pour utiliser votre pool de stockage et votre volume, vous pouvez tester sa fonctionnalité.

      Sur votre machine cliente (gluster2), naviguez jusqu’au point de montage que vous avez défini à l’étape précédente :

      Ensuite, créez quelques fichiers de test. La commande suivante crée dix fichiers vides séparés dans votre pool de stockage :

      • sudo touch file_{0..9}.test

      Si vous examinez les répertoires de stockage que vous avez définis précédemment sur chaque hôte de stockage, vous découvrirez que tous ces fichiers sont présents sur chaque système.

      Sur gluster0 :

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      De même, sur gluster1 :

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Comme ces sorties le montrent, les fichiers test que vous avez ajoutés au client ont également été écrits sur vos deux nœuds.

      S’il arrive jamais un moment où l’un des nœuds de votre cluster de stockage est hors service, il pourrait se désynchroniser avec le pool de stockage si des modifications sont apportées au système de fichiers. En effectuant une opération en lecture sur le point de montage du client après la remise en ligne du nœud, ce dernier sera avisé de récupérer les fichiers manquants :

      Maintenant que vous avez vérifié que votre volume de stockage est correctement monté et qu’il peut reproduire des données sur les deux machines du cluster, vous pouvez verrouiller l’accès au pool de stockage.

      Étape 7 — Restriction des fonctionnalités de redondance

      À ce stade, n’importe quel ordinateur peut se connecter à votre volume de stockage sans aucune restriction. Vous pouvez changer cela en réglant l’option auth.allow, qui définit les adresses IP de tous les clients qui devraient avoir accès au volume.

      Si vous utilisez la configuration /etc/hosts, les noms que vous avez définis pour chaque serveur ne seront pas acheminés correctement. Vous devez utiliser une adresse IP statique à la place. En revanche, si vous utilisez des enregistrements DNS, le nom de domaine que vous avez configuré fonctionnera ici.

      Sur l’un ou l’autre de vos nœuds de stockage (gluster0 ou gluster1), exécutez la commande suivante :

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Si la commande se termine avec succès, elle renverra cette sortie :

      Output

      volume set: success

      Si vous avez besoin de supprimer la restriction à n’importe quel moment, vous pouvez saisir :

      • sudo gluster volume set volume1 auth.allow *

      Cela permettra de se connecter à nouveau depuis n’importe quelle machine. C’est n’est pas sûr, mais peut être utile pour les problèmes de débogage.

      Si vous avez plusieurs clients, vous pouvez spécifier leurs adresses IP ou leurs noms de domaine en même temps (selon que vous utilisez /etc/hosts ou la résolution de noms d’hôtes DNS), séparés par des virgules :

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Votre pool de stockage est maintenant configuré, sécurisé, et prêt à être utilisé. Ensuite, vous allez apprendre quelques commandes qui vous aideront à obtenir des informations sur l’état de votre pool de stockage.

      Étape 8 — Obtenir des informations sur votre pool de stockage avec des commandes GlusterFS

      Lorsque vous commencez à changer certains des paramètres de votre stockage GlusterFS, vous pouvez être perdus concernant quelles options sont disponibles, quels volumes sont actifs, et quels nœuds sont associés à chaque volume.

      Plusieurs commandes différentes sont disponibles sur vos nœuds pour récupérer ces données et interagir avec votre pool de stockage.

      Si vous souhaitez des informations sur chacun de vos volumes, exécutez la commande gluster volume info :

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      De même, pour obtenir des informations sur tous les pairs auxquels ce nœud est connecté, vous pouvez saisir :

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Si vous souhaitez des informations détaillées sur la performance de chaque nœud, vous pouvez établir le profile d’un volume en saisissant :

      • sudo gluster volume profile volume_name start

      Lorsque cette commande est terminée, vous pouvez obtenir les informations recueillies en saisissant :

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Comme indiqué précédemment, pour obtenir la liste de tous les composants associés à GlusterFS fonctionnant sur chacun de vos nœuds, exécutez la commande gluster volume status :

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Si vous comptez administrer vos volumes de stockage GlusterFS, il peut être judicieux de vous rendre dans la console GlusterFS. Cela vous permettra d’interagir avec votre environnement GlusterFS sans avoir besoin de saisir sudo gluster avant toute saisie :

      Cela vous donnera une invite où vous pouvez saisir vos commandes. help en est une bonne pour vous orienter :

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      Lorsque vous avez terminé, exécutez exit pour quitter la console Gluster :

      Avec cela, vous êtes prêt à commencer à intégrer GlusterFS à votre prochaine application.

      Conclusion

      En suivant ce tutoriel, vous disposez d’un système de stockage redondant qui vous permettra d’écrire simultanément sur deux serveurs distincts. Cela peut être utile pour un certain nombre d’applications et peut garantir la disponibilité de vos données même en cas de panne d’un serveur.



      Source link