So richten Sie einen Apache Active-Passive-Cluster mit Pacemaker unter CentOS 7 ein

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.