Website-Suche

So konfigurieren und pflegen Sie Hochverfügbarkeit/Clustering unter Linux


Hohe Verfügbarkeit (HA) bezieht sich einfach auf die Qualität eines Systems, über einen langen Zeitraum kontinuierlich und fehlerfrei zu arbeiten. HA-Lösungen können mithilfe von Hardware und/oder Software implementiert werden, und eine der häufigsten Lösungen zur Implementierung von HA ist Clustering.

In der Informatik besteht ein Cluster aus zwei oder mehr Computern (allgemein bekannt als Knoten oder Mitglieder), die zusammenarbeiten, um eine Aufgabe auszuführen. In einem solchen Setup stellt nur ein Knoten den Dienst bereit, während der/die sekundären Knoten die Dienste übernehmen, wenn dieser ausfällt.

Cluster lassen sich in vier Haupttypen einteilen:

  • Speicher: Bietet ein konsistentes Dateisystem-Image auf allen Servern in einem Cluster, sodass die Server gleichzeitig in einem einzigen gemeinsam genutzten Dateisystem lesen und schreiben können.
  • Hohe Verfügbarkeit: Beseitigen Sie einzelne Fehlerquellen und führen Sie ein Failover von Diensten von einem Clusterknoten auf einen anderen durch, falls ein Knoten ausfällt.
  • Lastausgleich: Versenden Sie Netzwerkdienstanfragen an mehrere Clusterknoten, um die Anforderungslast auf die Clusterknoten auszugleichen.
  • Hohe Leistung: Führen Sie parallele oder gleichzeitige Verarbeitung durch und tragen Sie so zur Verbesserung der Leistung von Anwendungen bei.

Eine weitere weit verbreitete Lösung zur Bereitstellung von HA ist die Replikation (insbesondere Datenreplikationen). Replikation ist der Prozess, durch den 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 diesen Leitfaden verwenden wir zwei Linux-Server:

  • Knoten1: 192.168.10.10
  • Knoten2: 192.168.10.11

In diesem Artikel demonstrieren wir die Grundlagen der Bereitstellung, Konfiguration und Aufrechterhaltung von Hochverfügbarkeit/Clustering in Ubuntu 16.04/18.04 und CentOS 7. Wir zeigen, wie man den Nginx-HTTP-Dienst zum Cluster hinzufügt.

Konfigurieren lokaler 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 und bearbeiten Sie die Datei mit Ihrem bevorzugten Befehlszeileneditor.

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.

Nginx-Webserver installieren

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 den automatischen Start beim Booten. Überprüfen Sie dann mit dem Befehl systemctl, ob er aktiv ist.
Unter Ubuntu sollte der Dienst automatisch gestartet werden, sobald die Vorkonfiguration des Pakets abgeschlossen ist. Sie können ihn einfach aktivieren.

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

Nach dem Start des Nginx-Dienstes 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

Installieren und Konfigurieren von Corosync und Pacemaker

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

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

Stellen Sie nach Abschluss der Installation sicher, dass der pcs-Daemon auf beiden Servern ausgeführt wird.

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

Erstellen des Clusters

Während der Installation wird ein Systembenutzer namens „hacluster“ erstellt. Daher müssen wir die für PCs erforderliche Authentifizierung einrichten. Beginnen wir mit der Erstellung eines neuen Passworts für den Benutzer „hacluster“. Wir müssen auf allen Servern dasselbe Passwort verwenden:

sudo passwd hacluster

Führen Sie als Nächstes auf einem der Server (Knoten1) 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

Erstellen Sie nun einen Cluster und füllen Sie ihn mit einigen Knoten (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 

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

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

Überprüfen Sie nun mit dem folgenden Befehl, ob der Clusterdienst aktiv ist und läuft.

sudo pcs status
OR
sudo crm_mon -1

Aus der Ausgabe des obigen Befehls können Sie ersehen, dass es eine Warnung gibt, dass keine STONITH-Geräte vorhanden sind, STONITH jedoch noch im Cluster aktiviert ist. Darüber hinaus wurden keine Clusterressourcen/-dienste konfiguriert.

Konfigurieren von Clusteroptionen

Die erste Möglichkeit besteht darin, STONITH (oder Shoot The Other Node In The Head) zu deaktivieren, die Fencing-Implementierung auf Pacemaker.

Diese Komponente trägt dazu bei, Ihre Daten vor Beschädigung durch gleichzeitigen Zugriff zu schützen. Für die Zwecke dieser Anleitung deaktivieren wir es, da wir keine Geräte konfiguriert haben.

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

sudo pcs property set stonith-enabled=false

Ignorieren Sie als Nächstes auch die Quorum-Richtlinie, indem Sie den folgenden Befehl ausführen:

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 Eigenschaftenliste anzuzeigen und sicherzustellen, dass die oben genannten Optionen, stonith und die Quorum-Richtlinie deaktiviert sind.

sudo pcs property list

Hinzufügen eines Ressourcen-/Cluster-Dienstes

In diesem Abschnitt sehen wir uns an, wie man eine Clusterressource hinzufügt. Wir konfigurieren eine Floating-IP, also die IP-Adresse, die sofort von einem Server auf einen anderen innerhalb desselben Netzwerks oder Rechenzentrums verschoben werden kann. Kurz gesagt ist eine Floating-IP ein technisch gebräuchlicher Begriff, der für IPs verwendet wird, die nicht strikt an eine einzige Schnittstelle gebunden sind.

In diesem Fall wird es zur Unterstützung des Failovers in einem Hochverfügbarkeitscluster verwendet. Bedenken Sie, dass Floating-IPs nicht nur für Failover-Situationen gedacht sind, sondern auch für einige andere Anwendungsfälle. Wir müssen den Cluster so konfigurieren, dass zu jedem Zeitpunkt nur das aktive Mitglied des Clusters „besitzt“ oder auf die Floating-IP reagiert.

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

Beginnen Sie zunächst mit dem Hinzufügen von float_ip wie folgt. 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“: teilt Pacemaker mit, welches Skript verwendet werden soll, in diesem Fall IPaddr2, in welchem Namespace es sich befindet (pacemaker) und welchem Standard es ocf entspricht.
  • op-Monitor-Intervall=60s“: Weist Pacemaker an, den Zustand dieses Dienstes jede Minute zu überprüfen, indem die Überwachungsaktion des Agenten aufgerufen wird.

Fügen Sie dann die zweite Ressource mit dem Namen http_server hinzu. 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"

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

sudo pcs status resources

Wenn man sich die Ausgabe des Befehls ansieht, wurden die beiden hinzugefügten Ressourcen „floating_ip“ und „http_server“ aufgelistet. Der Floating_ip-Dienst ist ausgeschaltet, da der Primärknoten in Betrieb ist.

Wenn Sie auf Ihrem System eine Firewall aktiviert haben, müssen Sie den gesamten Datenverkehr zu Nginx und allen Hochverfügbarkeitsdiensten durch die Firewall zulassen, um eine ordnungsgemäße Kommunikation zwischen Knoten zu gewährleisten:

-------------- 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 besteht darin, zu testen, ob unser Hochverfügbarkeits-Setup funktioniert. Öffnen Sie einen Webbrowser und navigieren Sie zur Adresse 192.168.10.20. Sie sollten die Standard-Nginx-Seite von node2.example.com sehen, wie im Screenshot gezeigt.

Um einen Fehler 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 über node1.example.com auf die Standard-Nginx-Webseite zugreifen.

Alternativ können Sie einen Fehler simulieren, indem Sie den Dienst anweisen, direkt zu stoppen, ohne den Cluster auf einem der Knoten anzuhalten, indem Sie 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 (Standardeinstellung) ausführen. Innerhalb des Überwachungsintervalls von 2 Minuten sollten Sie sehen können, dass der Cluster den Ausfall von http_server bemerkt und verschoben wird es an einen anderen Knoten.

Damit Ihre Clusterdienste effizient ausgeführt werden können, müssen Sie möglicherweise einige Einschränkungen festlegen. Auf der Manpage zu pcs (man pcs) finden Sie eine Liste aller Verwendungsbefehle.

Weitere Informationen zu Corosync und Pacemaker finden Sie unter: https://clusterlabs.org/

Zusammenfassung

In diesem Leitfaden haben wir die Grundlagen für die Bereitstellung, Konfiguration und Wartung von Hochverfügbarkeit/Clustering/Replikation in Ubuntu 16.04/18.04 und CentOS 7 gezeigt. Wir haben gezeigt, wie man einen Nginx-HTTP-Dienst zu einem Cluster hinzufügt. Wenn Sie Gedanken oder Fragen mitteilen möchten, verwenden Sie das unten stehende Feedback-Formular.