Einführung
Hohe Verfügbarkeit ist heutzutage ein wichtiges Thema, da Service-Ausfälle sehr kostspielig sein können. Es ist ratsam, Maßnahmen zu ergreifen, die Ihre Website oder Webanwendung im Falle eines Ausfalls am Laufen halten. Mit dem Pacemaker-Stack können Sie einen Hochverfügbarkeitscluster konfigurieren.
Pacemaker ist ein Cluster-Ressourcenmanager. Es verwaltet alle Clusterdienste (Ressourcen) und verwendet die Messaging- und Mitgliedschaftsfunktionen der zugrunde liegenden Cluster-Engine. Wir werden Corosync als Cluster-Engine verwenden. Ressourcen haben einen Ressourcenagenten, bei dem es sich um ein externes Programm handelt, das den Dienst abstrahiert.
In einem Aktiv-Passiv-Cluster werden alle Dienste auf einem Primärsystem ausgeführt. Wenn das primäre System ausfällt, werden alle Dienste auf das Sicherungssystem verschoben. Ein Aktiv-Passiv-Cluster ermöglicht Wartungsarbeiten ohne Unterbrechung.
In diesem Lernprogramm erfahren Sie, wie Sie einen Apache-Aktiv / Passiv-Cluster mit hoher Verfügbarkeit erstellen. Der Webcluster wird über seine virtuelle IP-Adresse angesprochen und übernimmt automatisch das Failover, wenn ein Knoten ausfällt.
Ihre Benutzer greifen über die virtuelle IP-Adresse, die von Pacemaker verwaltet wird, auf Ihre Webanwendung zu. Der Apache-Dienst und die virtuelle IP befinden sich immer auf demselben Host. Wenn dieser Host ausfällt, werden sie auf den zweiten Host migriert und Ihre Benutzer bemerken den Ausfall nicht.
Voraussetzungen
Bevor Sie mit diesem Lernprogramm beginnen, benötigen Sie Folgendes:
-
Zwei CentOS 7-Tröpfchen, die die Clusterknoten darstellen. Wir bezeichnen diese als "webnode01" (IP-Adresse: "") und "webnode02" (IP-Adresse: "").
-
Ein Benutzer auf beiden Servern mit Root-Rechten. Sie können dies einrichten, indem Sie diesem Initial Server Setup with CentOS 7 Tutorial folgen.
Sie müssen einige Befehle auf beiden Servern und einige Befehle nur auf einem Server ausführen.
Schritt 1 - Konfigurieren der Namensauflösung
Zunächst müssen wir sicherstellen, dass beide Hosts den Hostnamen der beiden Clusterknoten auflösen können. Zu diesem Zweck fügen wir der Datei "+ / etc / hosts +" Einträge hinzu. Führen Sie diesen Schritt sowohl für webnode01 als auch für webnode02 aus.
Öffnen Sie "+ / etc / hosts " mit " nano +" oder Ihrem bevorzugten Texteditor.
sudo nano /etc/hosts
Fügen Sie die folgenden Einträge am Ende der Datei hinzu.
/ etc / hosts
webnode01.example.com webnode01
webnode02.example.com webnode02
Speichern und schließen Sie die Datei.
Schritt 2 - Installieren von Apache
In diesem Abschnitt installieren wir den Apache-Webserver. Sie müssen diesen Schritt auf beiden Hosts ausführen.
Installieren Sie zuerst Apache.
sudo yum install httpd
Der Apache-Ressourcenagent verwendet die Apache-Serverstatusseite, um den Zustand des Apache-Dienstes zu überprüfen. Sie müssen die Statusseite aktivieren, indem Sie die Datei "+ / etc / httpd / conf.d / status.conf +" erstellen.
sudo nano /etc/httpd/conf.d/status.conf
Fügen Sie die folgende Anweisung in diese Datei ein. Diese Anweisungen ermöglichen den Zugriff auf die Statusseite von localhost, jedoch nicht von einem anderen Host.
/etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>
Speichern und schließen Sie die Datei.
Schritt 3 - Installieren des Schrittmachers
Jetzt installieren wir den Pacemaker-Stack. Sie müssen diesen Schritt auf beiden Hosts ausführen.
Installieren Sie den Pacemaker-Stack und die PC-Cluster-Shell. Letzteres wird später zum Konfigurieren des Clusters verwendet.
sudo yum install pacemaker pcs
Jetzt müssen wir den pcs-Daemon starten, mit dem die Corosync-Konfiguration zwischen den Knoten synchronisiert wird.
sudo systemctl start pcsd.service
Damit der Daemon nach jedem Neustart gestartet wird, aktivieren wir auch den Dienst.
sudo systemctl enable pcsd.service
Nachdem Sie diese Pakete installiert haben, befindet sich auf Ihrem System ein neuer Benutzer mit dem Namen * hacluster *. Nach der Installation ist die Remote-Anmeldung für diesen Benutzer deaktiviert. Für Aufgaben wie das Synchronisieren der Konfiguration oder das Starten von Diensten auf anderen Knoten müssen wir für diesen Benutzer dasselbe Kennwort festlegen.
sudo passwd hacluster
Schritt 4 - Konfigurieren des Schrittmachers
Als Nächstes lassen wir den Cluster-Verkehr in FirewallD zu, damit unsere Hosts kommunizieren können.
Überprüfen Sie zunächst, ob FirewallD ausgeführt wird.
sudo firewall-cmd --state
Wenn es nicht läuft, starten Sie es.
sudo systemctl start firewalld.service
Sie müssen dies auf beiden Hosts tun. Fügen Sie nach der Ausführung den Dienst "+ Hochverfügbarkeit +" zu FirewallD hinzu.
sudo firewall-cmd --permanent --add-service=high-availability
Nach dieser Änderung müssen Sie FirewallD neu laden.
sudo firewall-cmd --reload
Wenn Sie mehr über FirewallD erfahren möchten, lesen Sie diese guide about how FirewallD unter CentOS 7 konfigurieren.
Nachdem unsere beiden Hosts miteinander kommunizieren können, können wir die Authentifizierung zwischen den beiden Knoten einrichten, indem wir diesen Befehl auf einem Host ausführen (in unserem Fall * webnode01 *).
sudo pcs cluster auth webnode01 webnode02
Username:
Sie sollten die folgende Ausgabe sehen:
Ausgabe
webnode01: Authorized
webnode02: Authorized
Als Nächstes generieren und synchronisieren wir die Corosync-Konfiguration auf demselben Host. Hier nennen wir den Cluster "Webcluster", aber Sie können ihn so nennen, wie Sie möchten.
sudo pcs cluster setup --name webnode01 webnode02
Sie sehen die folgende Ausgabe:
Ausgabe
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
webnode01: Succeeded
webnode02: Succeeded
Die Corosync-Konfiguration wird nun erstellt und auf alle Knoten verteilt. Die Konfiguration wird in der Datei + / etc / corosync / corosync.conf +
gespeichert.
Schritt 5 - Starten des Clusters
Der Cluster kann durch Ausführen des folgenden Befehls auf webnode01 gestartet werden.
sudo pcs cluster start --all
Um sicherzustellen, dass Pacemaker und Corosync beim Booten gestartet werden, müssen die Dienste auf beiden Hosts aktiviert werden.
sudo systemctl enable corosync.service
sudo systemctl enable pacemaker.service
Sie können jetzt den Status des Clusters überprüfen, indem Sie auf beiden Hosts den folgenden Befehl ausführen.
sudo pcs status
Stellen Sie sicher, dass beide Hosts in der Ausgabe als online markiert sind.
Ausgabe
. . .
Online: [ webnode01 webnode02 ]
Full list of resources:
PCSD Status:
webnode01: Online
webnode02: Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Schritt 6 - STONITH deaktivieren und Quorum ignorieren
Was ist STONITH?
In der Ausgabe von "+ pcs status +" wird eine Warnung angezeigt, dass keine STONITH-Geräte konfiguriert sind und STONITH nicht deaktiviert ist:
Warnung
. . .
WARNING: no stonith devices and stonith-enabled is not false
. . .
Was bedeutet das und warum sollte es dich interessieren?
Wenn der Cluster-Ressourcenmanager den Status eines Knotens oder einer Ressource auf einem Knoten nicht ermitteln kann, wird fencing verwendet, um den Cluster wieder in einen bekannten Status zu versetzen.
Durch Resource Level Fencing wird hauptsächlich sichergestellt, dass im Falle eines Ausfalls keine Datenverfälschung auftritt, indem eine Ressource konfiguriert wird. Mit DRBD (Distributed Replicated Block Device) können Sie beispielsweise das Fencing auf Ressourcenebene verwenden, um die Festplatte auf einem Knoten als veraltet zu markieren, wenn die Kommunikationsverbindung unterbrochen wird.
Node Level Fencing stellt sicher, dass auf einem Knoten keine Ressourcen ausgeführt werden. Dies geschieht durch Zurücksetzen des Knotens. Die Schrittmacher-Implementierung dieses Knotens heißt STONITH (steht für „Schieße den anderen Knoten in den Kopf“). Pacemaker unterstützt eine Vielzahl von Zaungeräten, z. eine unterbrechungsfreie Stromversorgung oder Verwaltungsschnittstellenkarten für Server.
Da die Fencing-Konfiguration auf Knotenebene stark von Ihrer Umgebung abhängt, wird sie für dieses Lernprogramm deaktiviert.
sudo pcs property set stonith-enabled=false
Was ist das Kollegium?
Ein Cluster hat ein Quorum, wenn mehr als die Hälfte der Knoten online sind. Das Standardverhalten von Pacemaker besteht darin, alle Ressourcen zu stoppen, wenn der Cluster kein Quorum hat. In einem Cluster mit zwei Knoten ist dies jedoch nicht sinnvoll. Der Cluster verliert das Quorum, wenn ein Knoten ausfällt.
In diesem Tutorial werden wir Pacemaker anweisen, das Quorum zu ignorieren, indem wir die "+ no-quorum-policy +" setzen:
sudo pcs property set no-quorum-policy=ignore
Schritt 7 - Konfigurieren der virtuellen IP-Adresse
Von nun an werden wir über die "+ pcs +" - Shell mit dem Cluster interagieren, sodass alle Befehle nur auf einem Host ausgeführt werden müssen. es ist egal welches.
Der Pacemaker-Cluster ist jetzt betriebsbereit und wir können die erste Ressource hinzufügen, nämlich die virtuelle IP-Adresse. Dazu konfigurieren wir den Ressourcenagenten "+ ocf: heartbeat: IPaddr2 +". Lassen Sie uns jedoch zunächst einige Begriffe erläutern.
Jeder Name eines Ressourcenagenten enthält drei oder zwei Felder, die durch einen Doppelpunkt getrennt sind:
-
Das erste Feld ist die Ressourcenklasse, dem der Ressourcenagent entspricht. Außerdem wird Pacemaker mitgeteilt, wo das Skript zu finden ist. Der Ressourcenagent
+ IPaddr2 +
entspricht dem OCF-Standard (Open Cluster Framework). -
Das zweite Feld hängt vom Standard ab. OCF-Ressourcen verwenden das zweite Feld für den OCF-Namespace.
-
Das dritte Feld ist der Name des Ressourcenagenten.
Ressourcen können meta-attributes und instance-attributes haben. Metaattribute hängen nicht vom Ressourcentyp ab. Instanzattribute sind ressourcenagentenspezifisch. Das einzige erforderliche Instanzattribut dieses Ressourcenagenten ist "+ ip " (die virtuelle IP-Adresse). Aus Gründen der Übersichtlichkeit werden wir jedoch auch " cidr_netmask +" (die Subnetzmaske in der CIDR-Notation) festlegen.
Ressourcenoperationen sind Aktionen, die der Cluster für eine Ressource ausführen kann (z. starten, stoppen, überwachen). Sie werden durch das Schlüsselwort "+ op " gekennzeichnet. Wir werden die Operation " monitor +" mit einem Intervall von 20 Sekunden hinzufügen, damit der Cluster alle 20 Sekunden überprüft, ob die Ressource noch fehlerfrei ist. Was als gesund angesehen wird, hängt vom Ressourcenagenten ab.
Zunächst erstellen wir die virtuelle IP-Adressressource. Hier verwenden wir "+ 127.0.0.2 +" als virtuelle IP und "* Cluster_VIP *" als Namen der Ressource.
sudo pcs resource create Cluster_VIP ocf:heartbeat:IPaddr2 ip= cidr_netmask=24 op monitor interval=20s
Überprüfen Sie als Nächstes den Status der Ressource.
sudo pcs status
Suchen Sie in der Ausgabe nach der folgenden Zeile:
Ausgabe
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
...
Die virtuelle IP-Adresse ist auf dem Host webnode01 aktiv.
Schritt 8 - Hinzufügen der Apache-Ressource
Jetzt können wir dem Cluster die zweite Ressource hinzufügen, die der Apache-Dienst bereitstellt. Der Ressourcenagent des Dienstes ist "+ ocf: heartbeat: apache".
Wir benennen die Ressource "+ WebServer " und setzen die Instanzattribute " configfile " (den Speicherort der Apache-Konfigurationsdatei) und " statusurl +" (die URL der Apache-Serverstatus-Seite). Wir werden wieder ein Überwachungsintervall von 20 Sekunden wählen.
sudo pcs resource create WebServer ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://127.0.0.1/server-status" op monitor interval=20s
Wir können den Status der Ressource wie zuvor abfragen.
sudo pcs status
Sie sollten * WebServer * in der Ausgabe sehen, die auf webnode02 ausgeführt wird.
Ausgabe
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
WebServer (ocf::heartbeat:apache): Started webnode02
...
Wie Sie sehen, werden die Ressourcen auf verschiedenen Hosts ausgeführt. Wir haben Pacemaker noch nicht mitgeteilt, dass diese Ressourcen auf demselben Host ausgeführt werden müssen, sodass sie gleichmäßig auf die Knoten verteilt sind.
Schritt 9 - Colocation Constraints konfigurieren
Fast jede Entscheidung in einem Pacemaker-Cluster, z. B. die Auswahl, wo eine Ressource ausgeführt werden soll, wird durch Vergleichen der Ergebnisse getroffen. Die Bewertungen werden pro Ressource berechnet, und der Clusterressourcenmanager wählt den Knoten mit der höchsten Bewertung für eine bestimmte Ressource aus. (Wenn ein Knoten eine negative Bewertung für eine Ressource aufweist, kann die Ressource auf diesem Knoten nicht ausgeführt werden.)
Wir können die Entscheidungen des Clusters mit Einschränkungen manipulieren. Einschränkungen haben eine Punktzahl. Wenn eine Einschränkung einen niedrigeren Wert als INFINITY hat, handelt es sich nur um eine Empfehlung. Eine Note von INFINITY bedeutet, dass es ein Muss ist.
Wir möchten sicherstellen, dass beide Ressourcen auf demselben Host ausgeführt werden, und definieren daher eine Colocation-Einschränkung mit einer Bewertung von INFINITY.
sudo pcs constraint colocation add WebServer Cluster_VIP INFINITY
Die Reihenfolge der Ressourcen in der Einschränkungsdefinition ist wichtig. Hier legen wir fest, dass die Apache-Ressource (+ WebServer +
) auf denselben Hosts ausgeführt werden muss, auf denen die virtuelle IP (+ Cluster_VIP +
) aktiv ist. Dies bedeutet auch, dass "+ WebSite " nirgendwo ausgeführt werden darf, wenn " Cluster_VIP +" nicht aktiv ist.
Sie können auch definieren, in welcher Reihenfolge die Ressourcen ausgeführt werden sollen, indem Sie Reihenfolgeeinschränkungen erstellen, oder bestimmte Hosts für einige Ressourcen bevorzugen, indem Sie Standorteinschränkungen erstellen.
Stellen Sie sicher, dass beide Ressourcen auf demselben Host ausgeführt werden.
sudo pcs status
Ausgabe
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
WebServer (ocf::heartbeat:apache): Started webnode01
...
Beide Ressourcen befinden sich jetzt auf webnode01.
Fazit
Sie haben einen Apache-Zwei-Knoten-Aktiv-Passiv-Cluster eingerichtet, auf den über die virtuelle IP-Adresse zugegriffen werden kann. Sie können Apache jetzt weiter konfigurieren, achten Sie jedoch darauf, die Konfiguration auf den Hosts zu synchronisieren. Sie können ein benutzerdefiniertes Skript dafür schreiben (z. mit + rsync +
) oder Sie können so etwas wie csync2 verwenden.
Wenn Sie die Dateien Ihrer Webanwendung auf die Hosts verteilen möchten, können Sie ein DRBD-Volume einrichten und https://drbd.linbit.com/users-guide/ch-pacemaker.html mit Pacemaker integrieren.