Website-Suche

Wie man Hochverfügbarkeit/Clustering in Linux konfiguriert und wartet


Hohe Verfügbarkeit (HA) bezieht sich einfach auf die Eigenschaft eines Systems, über einen langen Zeitraum kontinuierlich ohne Ausfall zu arbeiten. HA-Lösungen können mit Hardware und/oder Software implementiert werden, und eine der gängigen Lösungen zur Umsetzung von HA ist Clustering.

In der Informatik besteht ein Cluster aus zwei oder mehr Computern (häufig bekannt als Knoten oder Mitglieder), die zusammenarbeiten, um eine Aufgabe zu erfüllen. In einem solchen Aufbau stellt nur ein Knoten den Dienst bereit, wobei die sekundären Knoten einspringen, wenn dieser ausfällt.

Cluster fallen in vier Haupttypen:

  • Speicher: bietet ein konsistentes Dateisystemabbild über Server in einem Cluster hinweg, wodurch die Server gleichzeitig auf ein einzelnes gemeinsames Dateisystem lesen und schreiben können.
  • Hohe Verfügbarkeit: Einzelne Ausfallpunkte beseitigen und Dienste im Falle eines Ausfalls von einem Cluster-Knoten auf einen anderen umschalten.
  • Lastverteilung: Netzwerkdienstanfragen an mehrere Clusterknoten weiterleiten, um die Anfragelast gleichmäßig auf die Clusterknoten zu verteilen.
  • Hohe Leistung: führt parallele oder gleichzeitige Verarbeitung durch und trägt so dazu bei, die Leistung von Anwendungen zu verbessern.

Eine weitere weit verbreitete Lösung zur Bereitstellung von HA ist die Replikation (insbesondere Datenreplikationen). Replikation ist der Prozess, bei dem eine oder mehrere (sekundäre) Datenbanken mit einer einzelnen primären (oder Master-)Datenbank synchron gehalten werden können.

Um einen Cluster einzurichten, benötigen wir mindestens zwei Server. Für die Zwecke dieses Leitfadens werden wir zwei Linux-Server verwenden:

  • Knoten1: 192.168.10.10
  • Node2: 192.168.10.11

In diesem Artikel werden wir die Grundlagen zeigen, wie man Hochverfügbarkeit/Clustering in Ubuntu 16.04/18.04 und CentOS 7 bereitstellt, konfiguriert und wartet. Wir werden zeigen, wie man den Nginx-HTTP-Dienst zum Cluster hinzufügt.

Konfigurieren der lokalen DNS-Einstellungen auf jedem Server

Damit die beiden Server miteinander kommunizieren können, müssen wir die entsprechenden lokalen DNS-Einstellungen in der Datei /etc/hosts auf beiden Servern konfigurieren.

Öffnen Sie die Datei und bearbeiten Sie sie mit Ihrem bevorzugten Kommandozeilen-Editor.

$ sudo vim /etc/hosts  

Fügen Sie die folgenden Einträge mit den tatsächlichen IP-Adressen Ihrer Server hinzu.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Speichern Sie die Änderungen und schließen Sie die Datei.

Installation des Nginx-Webservers

Installieren Sie nun den Nginx-Webserver mit den folgenden Befehlen.

$ sudo apt install nginx  [On Ubuntu]
$ sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Sobald die Installation abgeschlossen ist, starten Sie zunächst den Nginx-Dienst und aktivieren Sie ihn so, dass er beim Booten automatisch startet, und prüfen Sie dann mit dem Befehl systemctl, ob er läuft.
Unter Ubuntu sollte der Dienst unmittelbar nach Abschluss der Paketvor-Konfiguration automatisch gestartet werden, Sie können ihn einfach aktivieren.

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

Nachdem der Nginx-Dienst gestartet wurde, müssen wir benutzerdefinierte Webseiten erstellen, um Vorgänge auf beiden Servern zu identifizieren und zu testen. Wir werden den Inhalt der Standard-Nginx-Indexseite wie gezeigt ändern.

$ echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
$ echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Installation und Konfiguration von Corosync und Pacemaker

Als Nächstes müssen wir Pacemaker, Corosync und Pcs auf jedem Knoten wie folgt installieren.

$ sudo apt install corosync pacemaker pcs	#Ubuntu 
$ sudo yum install corosync pacemaker pcs	#CentOS 

Sobald die Installation abgeschlossen ist, stellen Sie sicher, dass der pcs-Daemon auf beiden Servern läuft.

$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd

Den Cluster erstellen

Während der Installation wird ein Systembenutzer namens “hacluster” erstellt. Daher müssen wir die für pcs erforderliche Authentifizierung einrichten. Beginnen wir damit, ein neues Passwort für den Benutzer “hacluster” zu erstellen; wir müssen dasselbe Passwort auf allen Servern verwenden:

$ sudo passwd hacluster

Cluster-Benutzerpasswort erstellen

Als Nächstes führen Sie auf einem der Server (Node1) den folgenden Befehl aus, um die für pcs erforderliche Authentifizierung einzurichten.

$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Authentifizierung für PCS einrichten

Erstellen Sie nun einen Cluster und fügen Sie einige Knoten hinzu (der Clustername darf 15 Zeichen nicht überschreiten, in diesem Beispiel haben wir examplecluster verwendet) auf dem Server Node1.

$ sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Cluster auf Node1 erstellen

Aktivieren Sie nun den Cluster beim Start und starten Sie den Dienst.

$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

Cluster aktivieren und starten

Überprüfen Sie nun, ob der Clusterdienst läuft, indem Sie den folgenden Befehl verwenden.

$ sudo pcs status
OR
$ sudo crm_mon -1

Cluster-Status überprüfen

Aus der Ausgabe des obigen Befehls können Sie sehen, dass es eine Warnung über keine STONITH-Geräte gibt, obwohl STONITH im Cluster noch aktiviert ist. Außerdem wurden keine Cluster-Ressourcen/Dienste konfiguriert.

Cluster-Optionen konfigurieren

Die erste Option ist, STONITH (oder Shoot The Other Node In The Head) zu deaktivieren, die Fencing-Implementierung von Pacemaker.

Diese Komponente hilft, Ihre Daten vor Beschädigungen durch gleichzeitigen Zugriff zu schützen. Für die Zwecke dieses Leitfadens werden wir sie deaktivieren, da wir keine Geräte konfiguriert haben.

Um STONITH auszuschalten, führen Sie den folgenden Befehl aus:

$ sudo pcs property set stonith-enabled=false

Führen Sie als Nächstes den folgenden Befehl aus, um die Quorum-Richtlinie zu ignorieren:

$ sudo pcs property set no-quorum-policy=ignore

Nachdem Sie die oben genannten Optionen festgelegt haben, führen Sie den folgenden Befehl aus, um die Liste der Eigenschaften anzuzeigen und sicherzustellen, dass die oben genannten Optionen, stonith und die Quorumpolitik, deaktiviert sind.

$ sudo pcs property list

Cluster-Eigenschaften anzeigen

Hinzufügen eines Ressourcen-/Clusterdienstes

In diesem Abschnitt werden wir uns ansehen, wie man eine Cluster-Ressource hinzufügt. Wir werden eine schwebende IP konfigurieren, also die IP-Adresse, die sofort von einem Server auf einen anderen innerhalb desselben Netzwerks oder Rechenzentrums verschoben werden kann. Kurz gesagt, eine schwebende IP ist ein technischer allgemeiner Begriff, der für IPs verwendet wird, die nicht strikt an eine einzelne Schnittstelle gebunden sind.

In diesem Fall wird es verwendet, um Failover in einem Hochverfügbarkeits-Cluster zu unterstützen. Beachten Sie, dass Floating-IP-Adressen nicht nur für Failover-Situationen gedacht sind, sie haben noch einige andere Anwendungsfälle. Wir müssen den Cluster so konfigurieren, dass nur das aktive Mitglied des Clusters zu jedem Zeitpunkt die Floating-IP „besitzt“ oder darauf reagiert.

Wir werden zwei Cluster-Ressourcen hinzufügen: die schwebende IP-Adressressource namens “floating_ip” und eine Ressource für den Nginx-Webserver namens “http_server”.

Beginnen Sie zunächst damit, die Floating-IP wie folgt hinzuzufügen. In diesem Beispiel lautet unsere Floating-IP-Adresse 192.168.10.20.

$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

wo :

  • floating_ip: ist der Name des Dienstes.
  • “ocf:heartbeat:IPaddr2 ”: sagt Pacemaker, welches Skript verwendet werden soll, in diesem Fall IPaddr2, in welchem Namespace es sich befindet (pacemaker) und welchem Standard es entspricht (OCF).
  • “op monitor interval=60s”: weist Pacemaker an, die Gesundheit dieses Dienstes alle eine Minute zu überprüfen, indem die Monitor-Aktion des Agents aufgerufen wird.

Fügen Sie dann die zweite Ressource hinzu, die http_server genannt wird. Hier ist der Ressourcenagent des Dienstes ocf:heartbeat:nginx.

$ sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Sobald Sie die Clusterdienste hinzugefügt haben, führen Sie den folgenden Befehl aus, um den Status der Ressourcen zu überprüfen.

$ sudo pcs status resources

Cluster-Ressourcen überprüfen

Beim Betrachten der Ausgabe des Befehls wurden die beiden hinzugefügten Ressourcen: “floating_ip ” und “http_server ” aufgelistet. Der floating_ip-Dienst ist deaktiviert, da der primäre Knoten in Betrieb ist.

Wenn auf Ihrem System die Firewall aktiviert ist, müssen Sie den gesamten Datenverkehr zu Nginx und allen Hochverfügbarkeitsdiensten durch die Firewall zulassen, damit die Kommunikation zwischen den Knoten ordnungsgemäß funktioniert:

-------------- CentOS 7 -------------- 
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=high-availability		
$ sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
$ sudo ufw allow http	
$ sudo ufw allow high-availability						
$ sudo ufw reload 

Testen von Hochverfügbarkeit/Clustering

Der letzte und wichtige Schritt ist zu testen, dass unser Hochverfügbarkeits-Setup funktioniert. Öffnen Sie einen Webbrowser und navigieren Sie zu der Adresse 192.168.10.20. Sie sollten die Standard-Nginx-Seite von node2.example.com wie im Screenshot gezeigt sehen.

Testcluster vor dem Ausfall

Um einen Ausfall zu simulieren, führen Sie den folgenden Befehl aus, um den Cluster auf node2.example.com zu stoppen.

$ sudo pcs cluster stop http_server

Laden Sie dann die Seite unter 192.168.10.20 neu, Sie sollten nun die Standard-Nginx-Webseite von node1.example.com aufrufen können.

Testcluster nach Ausfall

Alternativ können Sie einen Fehler simulieren, indem Sie dem Dienst direkt anweisen, zu stoppen, ohne den Cluster auf einem der Knoten zu stoppen, und dabei den folgenden Befehl auf einem der Knoten verwenden:

 
$ sudo crm_resource --resource http_server --force-stop 

Dann müssen Sie crm_mon im interaktiven Modus ausführen (der Standard). Innerhalb des Überwachungsintervalls von 2 Minuten sollten Sie in der Lage sein, zu sehen, dass der Cluster bemerkt, dass http_server ausgefallen ist und ihn auf einen anderen Knoten verschiebt.

Damit Ihre Cluster-Dienste effizient laufen, müssen Sie möglicherweise einige Einschränkungen festlegen. Sie können die pcs-Man-Seite (man pcs) für eine Liste aller Verwendungskommandos einsehen.

Für weitere Informationen zu Corosync und Pacemaker, siehe: https://clusterlabs.org/

Zusammenfassung

In diesem Leitfaden haben wir die Grundlagen gezeigt, wie man Hochverfügbarkeit/Clustering/Replikation in Ubuntu 16.04/18.04 und CentOS 7 bereitstellt, konfiguriert und wartet. Wir haben demonstriert, wie man den Nginx-HTTP-Dienst zu einem Cluster hinzufügt. Wenn Sie Gedanken teilen oder Fragen haben, verwenden Sie das untenstehende Feedback-Formular.