Nginx Hochverfügbarkeit · 8 min read · Nov 29, 2025

So richten Sie Nginx-Hochverfügbarkeit mit Pacemaker, Corosync und Crmsh auf Ubuntu 16.04 ein

In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie einen hochverfügbaren, clusterbasierten Nginx-Webserver mit Pacemaker, Corosync und Crmsh erstellen. Wir werden einen aktiven-passiven Cluster oder Failover-Cluster Nginx-Webserver mit Pacemaker auf Ubuntu 16.04 erstellen.

Pacemaker ist eine Open-Source-Cluster-Manager-Software, die maximale Hochverfügbarkeit Ihrer Dienste erreicht. Es ist ein fortschrittlicher und skalierbarer HA-Cluster-Manager, der seit 2007 von ClusterLabs entwickelt wird.

Die Corosync Cluster Engine ist ein Open-Source-Projekt, das 2008 aus dem OpenAIS-Projekt hervorgegangen ist und unter der BSD-Lizenz veröffentlicht wurde. Es ist ein Gruppennachrichtensystem mit zusätzlichen Funktionen zur Implementierung von Hochverfügbarkeit innerhalb von Anwendungen.

Es gibt mehrere Anwendungen für die Pacemaker-Schnittstelle, und Crmsh ist eine davon. Es ist eine Pacemaker-Befehlszeilenschnittstelle zur Verwaltung des Pacemaker-Hochverfügbarkeitsstacks. Crmsh ist in Python geschrieben. Wir können den Pacemaker-HA-Stack mit dem Crmsh-Befehlszeilentool erstellen, konfigurieren und beheben.

Voraussetzungen

  • Drei Ubuntu 16.04-Server - web01 10.0.15.11
  • web02 10.0.15.12
  • web03 10.0.15.13
  • Eine schwebende IP-Adresse 10.0.15.15
  • Root-Rechte

Was werden wir tun?

  1. Hosts-Datei zuordnen.
  2. Nginx installieren und konfigurieren.
  3. Pacemaker, Corosync und Crmsh installieren.
  4. Corosync-Schlüssel konfigurieren.
  5. Alle Dienste starten.
  6. Einen Cluster erstellen und konfigurieren.
  7. Testen.

Schritt 1 - Hosts-Datei zuordnen

Hinweis:
Führen Sie die Schritte 1 - 3 auf allen drei Servern ‘web01’, ‘web02’, ‘web03’ aus.

In diesem Tutorial verwende ich 3 Ubuntu 16.04-Server, und jeder von ihnen hat einen eindeutigen Hostnamen: ‘web01’, ‘web02’ und ‘web03’. Jeder Server kann sich mit den Hostnamen der anderen Server verbinden.

Um dies zu erreichen, bearbeiten Sie die Datei ‘/etc/hosts’ auf allen Servern mit vim.

vim /etc/hosts

Fügen Sie die Konfiguration der /etc/hosts-Datei unten ein.

10.0.15.11      web01  
10.0.15.12      web02  
10.0.15.13      web03  
10.0.15.15      ha-web.co

Speichern Sie die Datei und beenden Sie vim.

Testen Sie als Nächstes alle Server, indem Sie die anderen Server über jeden Hostnamen anpingen.

ping -c 3 web01  
ping -c 3 web02  
ping -c 3 web03

Alle Server anpingen

Schritt 2 - Nginx installieren und konfigurieren

Jetzt beginnen wir mit der Erstellung der Hochverfügbarkeitskonfiguration des Nginx-Webservers, indem wir den Failover-Cluster mit Pacemaker erstellen. Wir müssen zuerst Nginx auf jedem der Serverknoten installieren.

Installieren Sie Nginx mit dem folgenden apt-Befehl.

apt install -y nginx

Wenn die Installation abgeschlossen ist, ersetzen Sie die Standardseite von Nginx durch eine eindeutige Seite auf jedem Server, indem Sie die folgenden Befehle ausführen, damit wir später identifizieren können, welcher Server eine Seite geliefert hat.

#Befehl auf 'web01' ausführen  
echo '

web01 - hakase-labs

' > /var/www/html/index.html #Befehl auf 'web02' ausführen echo '

web02 - hakase-labs

' > /var/www/html/index.html #Befehl auf 'web03' ausführen echo '

web03 - hakase-labs

' > /var/www/html/index.html

Jetzt stoppen Sie den Webserver.

systemctl stop nginx

Die Installation und Konfiguration von Nginx ist abgeschlossen.

Nginx auf Ubuntu 16.04 installieren und konfigurieren

Schritt 3 - Pacemaker, Corosync und Crmsh installieren

Pacemaker ist eine Open-Source-Cluster-Manager-App. Corosync ist eine Cluster-Engine für Pacemaker, und Crmsh ist ein auf Python basierendes Tool zur Verwaltung eines Pacemaker-Clusters. Alle diese Anwendungen sind im Ubuntu-Repository verfügbar.

Installieren Sie Pacemaker, Corosync und crmsh mit dem folgenden apt-Befehl.

apt install -y pacemaker corosync crmsh

Nach der Installation laufen all diese Dienste automatisch auf dem System. Stoppen Sie sie mit den folgenden systemctl-Befehlen.

systemctl stop corosync  
systemctl stop pacemaker

Der Software-Stack, der die Hochverfügbarkeit für Nginx bereitstellt, wurde installiert.

Pacemaker, Corosync und Crmsh auf Ubuntu 16.04 installieren

Schritt 4 - Corosync konfigurieren

Hinweis:
Führen Sie Schritt 4 nur auf dem Server ‘web01’ aus.

Da wir pcsd für Ubuntu nicht verwenden, müssen wir Corosync manuell konfigurieren. Wir werden den Corosync-Schlüssel für die Cluster-Authentifizierung generieren und eine neue Corosync-Konfigurationsdatei auf dem Server ‘web01’ erstellen, dann den Schlüssel und die Konfiguration auf die anderen Server ‘web02’ und ‘web03’ kopieren.

Bevor wir den Corosync-Schlüssel generieren, müssen wir das neue Paket ‘haveged’ installieren. Es wird verwendet, um bessere Zufallszahlen für die Generierung des Corosync-Schlüssels zu erhalten.

Installieren Sie haveged aus dem Repository mit dem apt-Befehl.

apt install -y haveged

Jetzt generieren Sie einen neuen Corosync-Schlüssel mit dem folgenden Befehl.

corosync-keygen

Wenn die Schlüsselgenerierung abgeschlossen ist, können Sie den neuen Schlüssel ‘authkey’ im Verzeichnis ‘/etc/corosync/‘ sehen.

ls -lah /etc/corosync/

Corosync-Schlüssel generieren

Gehen Sie als Nächstes in das Verzeichnis ‘/etc/corosync’ und sichern Sie die Standardkonfigurationsdatei ‘corosync.conf’.

cd /etc/corosync/  
mv corosync.conf corosync.conf.bekup

Erstellen Sie dann eine neue Konfigurationsdatei ‘corosync.conf’ mit vim.

vim corosync.conf

Fügen Sie die folgende Konfiguration in diese Datei ein.

# Totem-Protokollkonfiguration  
totem {  
  version: 2  
  cluster_name: hakase-cluster  
  transport: udpu  
   
# Schnittstellenkonfiguration für Corosync  
  interface {  
    ringnumber: 0  
    bindnetaddr: 10.0.15.0  
    broadcast: yes  
    mcastport: 5407  
  }  
}  
   
# Knotenliste - Serverliste  
nodelist {  
  node {  
    ring0_addr: web01  
  }  
  node {  
    ring0_addr: web02  
  }  
  node {  
    ring0_addr: web03  
  }  
}  
   
# Quorum-Konfiguration  
quorum {  
  provider: corosync_votequorum  
}  
   
# Corosync-Logkonfiguration  
logging {  
  to_logfile: yes  
  logfile: /var/log/corosync/corosync.log  
  to_syslog: yes  
  timestamp: on  
}  
   
service {  
  name: pacemaker  
  ver: 0  
}

Speichern Sie die Datei und beenden Sie den Editor.

Kopieren Sie als Nächstes den Authentifizierungsschlüssel und die Konfigurationsdatei vom Server ‘web01’ auf die Server ‘web02’ und ‘web03’.

scp /etc/corosync/* root@web02:/etc/corosync/  
scp /etc/corosync/* root@web03:/etc/corosync/

Corosync-Konfiguration von web01-Knoten auf andere kopieren

Wenn alles abgeschlossen ist, gehen Sie zu den Servern ‘web02’ und ‘web03’ und überprüfen Sie die Dateien.

ssh root@web02  
cd /etc/corosync/  
ls -lah

Corosync-Konfiguration auf dem web02-Knoten

Die Corosync-Konfiguration ist abgeschlossen.

Schritt 5 - Alle Cluster-Dienste starten

Hinweis:
Führen Sie Schritt 5 auf allen Servern aus.

Starten Sie den HA-Cluster-Software-Stack, Pacemaker und Corosync, auf allen Servern. Aktivieren Sie dann, dass es beim Booten automatisch gestartet wird.

Starten Sie Corosync und fügen Sie es hinzu, um beim Booten automatisch zu starten.

systemctl start corosync  
systemctl enable corosync

Starten Sie jetzt Pacemaker und aktivieren Sie es, um beim Booten zu starten.

systemctl start pacemaker  
update-rc.d pacemaker defaults 20 01  
systemctl enable pacemaker

Alle Dienste wurden gestartet, überprüfen Sie alle Knoten und stellen Sie sicher, dass der Serverstatus auf allen ‘Online’ ist.

crm status

Cluster-Knotenstatus

Oder Sie können den Status überprüfen, indem Sie die Corosync-Mitglieder mit dem folgenden corosync-cmapctl-Befehl überprüfen.

corosync-cmapctl | grep members

Sie werden alle Server-IP-Adressen sehen.

Corosync-Mitgliederliste

Schritt 6 - Cluster erstellen und konfigurieren

HINWEIS:
Führen Sie Schritt 6 nur auf dem Server web01 aus.

In diesem Schritt konfigurieren wir den aktiven-passiven Nginx-Cluster mit dem crmsh-Befehlszeilentool. Da wir kein STONITH-Gerät verwenden, möchten wir STONITH deaktivieren und die Quorum-Richtlinie in unserem Cluster ignorieren.

Führen Sie die crm-Befehle unten aus, um ‘STONITH’ zu deaktivieren und die Quorum-Richtlinie zu ignorieren.

crm configure property stonith-enabled=false  
crm configure property no-quorum-policy=ignore

Überprüfen Sie jetzt den STONITH-Status und die Quorum-Richtlinie mit dem folgenden crm-Befehl.

crm configure show

Sie werden das Ergebnis wie unten sehen.

STONITH deaktivieren und Quorum-Richtlinie ignorieren

Als Nächstes müssen wir einige neue Ressourcen für den Cluster erstellen. Pacemaker unterstützt die folgenden Arten von Resource Agents (RA).

  • LSB (Linux Standard Based) - Bereitgestellt von der Linux-Distribution. z.B.: ‘/etc/init.d/service’-Skript.
  • OCF (Open Cluster Framework) - Eine Sammlung von Tools für das Cluster-Computing. Das Projekt ist Teil der Linux Foundation.

Für unseren Nginx-HA-Webserver müssen wir zwei OCF-Ressourcen erstellen: ‘virtual_ip’ für die schwebende IP und ‘webserver’ für den Nginx-Dienst.

Erstellen Sie eine neue ‘virtual_ip’-Ressource für die Konfiguration der schwebenden IP mit dem folgenden crm-Befehl.

sudo crm configure primitive virtual_ip \  
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \  
cidr_netmask="32" op monitor interval="10s" \  
meta migration-threshold="10"

Und für den Nginx ‘webserver’ erstellen Sie die Ressource mit dem folgenden Befehl.

sudo crm configure primitive webserver \  
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \  
op start timeout="40s" interval="0" \  
op stop timeout="60s" interval="0" \  
op monitor interval="10s" timeout="60s" \  
meta migration-threshold="10"

Wenn dies abgeschlossen ist, überprüfen Sie die neuen Ressourcen ‘virtual_ip’ und ‘webserver’ mit dem folgenden Befehl. Stellen Sie sicher, dass alle Ressourcen den Status ‘gestart’ haben.

crm resource status

Neue Ressourcen virtual_ip und webserver zum Cluster hinzufügen

Schließlich müssen wir eine Gruppe für die neue Konfiguration des Failover-IP-Dienstes hinzufügen. Wir möchten den ‘Nginx’-Dienst auf einer ‘webserver’-Ressource mit einer schwebenden IP auf einer ‘virtual_ip’-Ressource migrieren.

Wir haben bereits die schwebende IP und den Dienst erstellt, fügen Sie jetzt diese Ressourcen zu einer neuen Gruppe mit dem Namen ‘hakase_balancing’ mit dem folgenden Befehl hinzu. Sie können hier natürlich Ihren eigenen Gruppennamen wählen, stellen Sie nur sicher, dass Sie den Namen dann überall dort ersetzen, wo er verwendet wird.

sudo crm configure group hakase_balancing virtual_ip webserver

Eine neue Ressourcengruppe mit dem Namen ‘hakase_balancing’ wurde definiert. Sie können dies mit dem folgenden Befehl überprüfen.

crm resource show

Sie erhalten eine Gruppe mit dem Namen hakase_balancing mit den Mitgliedern ‘virtual_ip’ und ‘webserver’-Ressourcen.

Neue Gruppenressource für den Cluster hinzufügen

Die Clusterkonfiguration ist abgeschlossen.

Schritt 7 - Testen

Testen Sie den Knotenstatus und den Clusterstatus.

crm status

Cluster-Knotenstatus und Ressourcenstatus

Wir haben 3 Knoten mit dem Status ‘Online’.

Wir haben eine Ressourcengruppe mit dem Namen ‘hakase_balancing’, und sie läuft jetzt auf dem Knoten ‘web01’.

Testen Sie den Nginx-Webserver von einem Webbrowser aus. Besuchen Sie die schwebende IP-Adresse, der Name meines Testservers ist - ha-web.co. Verwenden Sie hier den Namen, den Sie für Ihren Server gewählt haben.

Alle Ressourcen befinden sich auf dem Knoten ‘web01’.

Testen des aktiven-passiven Clusters oder Failover

Stoppen Sie den Cluster auf dem Server ‘web01’, indem Sie den folgenden Befehl auf dem Knoten ‘web01’ ausführen.

crm cluster stop

Sie erhalten das Ergebnis ‘ INFO: Cluster-Dienste gestoppt ‘.

Melden Sie sich jetzt am Knoten ‘web02’ an und überprüfen Sie den Clusterstatus.

crm status

Nginx-Hochverfügbarkeitscluster auf Ubuntu 16.04

Jetzt erhalten Sie das Ergebnis, dass der Knoten ‘web01’ ‘Offline’ ist und die Ressourcen von virtual_ip und webserver auf den Knoten ‘web02’ umgeschaltet wurden.

Wenn Sie erneut die schwebende IP ‘ ha-web.co ‘ besuchen, erhalten Sie die Seite von web02.

Die Hochverfügbarkeit von Nginx mit Pacemaker, Corosync und Crmsh auf Ubuntu 16.04 wurde erfolgreich installiert und getestet.

Referenz

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.