Wie wir wissen, ist NGINX ein hoch bewerteter Webserver, der auch als Reverse-Proxy, Load Balancer und HTTP-Cache verwendet werden kann. In diesem Artikel zeigen wir, wie Sie einen hochverfügbaren (HA) NGINX-Webserver mit Keepalived unter Linux einrichten. Keepalived arbeitet mit VRRP (Virtual Router Redundancy Protocol), das es ermöglicht, dass eine statische IP-Adresse zwischen zwei Linux-Systemen umgeschaltet wird.
Im Folgenden finden Sie meine Labordetails für NGINX HA:
- Knoten 1 – 192.168.1.130 – nginx1.example.com – mindestens CentOS 8 / RHEL 8
- Knoten 2 – 192.168.1.140 – nginx2.example.com – mindestens CentOS 8 / RHEL 8
- Virtuelle IP (VIP) – 192.168.1.150
- sudo-Benutzer pkumar
- Firewall aktiviert
- SELinux läuft
Lassen Sie uns zu den Installations- und Konfigurationsschritten springen,
Schritt 1) NGINX-Webserver über die Befehlszeile installieren
Das NGINX-Paket ist in den standardmäßigen CentOS 8 / RHEL 8-Repositories verfügbar, führen Sie also den folgenden dnf-Befehl auf beiden Knoten aus, um den Nginx-Webserver zu installieren
$ sudo dnf install -y nginx
Für CentOS 7 / RHEL 7
Das NGINX-Paket ist in den standardmäßigen CentOS 7 / RHEL 7-Repositorys nicht verfügbar. Um es also zuerst zu installieren, müssen wir das epel-Repository aktivieren. Führen Sie den folgenden Befehl auf beiden Knoten aus
$ sudo yum install epel-release -y $ sudo yum install -y nginx
Für Ubuntu / Debian
Für Debian-basierte Linux-Distributionen ist das nginx-Webserverpaket in den Standardpaket-Repositories verfügbar. Um nginx zu installieren, führen Sie also
aus$ sudo apt update $ sudo apt install -y nginx
Schritt 2) Benutzerdefinierte index.html-Datei für beide Knoten konfigurieren
Lassen Sie uns eine benutzerdefinierte index.html-Datei für beide Knoten erstellen, damit wir beim Zugriff über die virtuelle IP leicht erkennen können, welcher Server die Website bedient.
Führen Sie für Knoten 1 den folgenden echo-Befehl aus,
[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html
Führen Sie für Knoten 2
aus[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html
Schritt 3) NGINX-Port in der Firewall zulassen und seinen Dienst starten
Falls die Firewall aktiviert ist und auf beiden Knoten ausgeführt wird, lassen Sie Port 80 zu, indem Sie die folgenden Befehle ausführen:
Für CentOS / RHEL-System
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd –reload
Für Ubuntu / Debian-System
$ sudo ufw allow 'Nginx HTTP'
Starten und aktivieren Sie den nginx-Dienst, indem Sie auf beiden Knoten die folgenden Befehlsbefehle ausführen,
$ sudo systemctl start nginx $ sudo systemctl enable nginx
Testen Sie den NGINX-Webserver beider Knoten, indem Sie den folgenden Curl-Befehl von außen ausführen,
$ curl http://192.168.1.130 <h1>This is NGINX Web Server from Node 1</h1> $ curl http://192.168.1.140 <h1>This is NGINX Web Server from Node 2</h1>
Perfekt, die obige Befehlsausgabe bestätigt, dass nginx läuft und von außen mit der IP-Adresse des Systems zugänglich ist.
Schritt 4) Keepalived installieren und konfigurieren
Für CentOS / RHEL-Systeme sind das Keepalived-Paket und seine Abhängigkeiten in den Standardpaket-Repositories verfügbar, sodass die Installation unkompliziert ist. Führen Sie einfach den folgenden Befehl auf beiden Knoten aus.
$ sudo dnf install -y keepalived // CentOS 8/ RHEL 8 $ sudo yum install -y keepalived // CentOS 7 / RHEL 7
Für Ubuntu / Debian-System,
$ apt install -y keepalived
Sobald Keepalived installiert ist, konfigurieren Sie es, indem Sie seine Konfigurationsdatei „/etc/keepalived/keepalived.conf“ bearbeiten. Wir behalten Knoten 1 als Master-Knoten und Knoten 2 als Backup-Knoten.
Sicherungskopie der Konfigurationsdatei erstellen,
[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org
Ersetzen Sie den Inhalt von keepalived.conf durch Folgendes:
[[email protected] ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf [[email protected] ~]$ sudo vi /etc/keepalived/keepalived.conf
Fügen Sie den folgenden Inhalt ein
global_defs { # Keepalived process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state MASTER interface enp0s3 virtual_router_id 151 priority 110 # The virtual ip address shared between the two NGINX Web Server which will float virtual_ipaddress { 192.168.1.150/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Erstellen Sie nun ein Skript mit folgendem Inhalt, das überprüft, ob der nginx-Dienst ausgeführt wird oder nicht. Keepalived überprüft immer die Ausgabe des Skripts check_nginx.sh, wenn es feststellt, dass der nginx-Dienst angehalten wurde oder nicht antwortet, verschiebt es die virtuelle IP-Adresse auf den Backup-Knoten.
[[email protected] ~]$ sudo vi /bin/check_nginx.sh #!/bin/sh if [ -z "`pidof nginx`" ]; then exit 1 fi
Speichern und schließen Sie die Datei und setzen Sie die erforderliche Berechtigung mit dem Befehl chmod,
[[email protected] ~]$ sudo chmod 755 /bin/check_nginx.sh
Kopieren Sie nun die Dateien keepalived.conf und check_nginx.sh von Knoten 1 nach Knoten 2 mit dem folgenden scp-Befehl.
[[email protected] ~]$ scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/ [[email protected] ~]$ scp /bin/check_nginx.sh [email protected]0:/bin/
Sobald die Dateien kopiert sind, melden Sie sich bei Knoten 2 an und nehmen Sie einige Änderungen in der Datei keepalived.conf vor. Ändern Sie den Status von MASTER auf BACKUP und verringern Sie die Priorität, indem Sie sie auf 100 setzen. Nachdem Sie die Änderungen vorgenommen haben, würde keepalived.conf auf Knoten 2 wie folgt aussehen:
Falls die Betriebssystem-Firewall ausgeführt wird, lassen Sie VRRP zu, indem Sie die folgenden Befehle ausführen:
Hinweis – Führen Sie diese Befehle auf beiden Knoten aus
Für CentOS / RHEL-Systeme
$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent $ sudo firewall-cmd --reload
Für Ubuntu / Debian-Systeme
Erlauben Sie VRRP, indem Sie Folgendes ausführen, vom Master-Knoten (Knoten 1) führen Sie
aus$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast' $ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'
Vom Backup-/Slave-Knoten (Knoten 2)
$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast' $ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'
Starten Sie nun endlich den Keepalived-Dienst, indem Sie unter den systemctl-Befehlen von beiden Knoten ausführen,
$ sudo systemctl start keepalived $ sudo systemctl enable keepalived
Überprüfen Sie den Keepalived-Dienst, indem Sie Folgendes ausführen:
$ sudo systemctl status keepalived
Perfekt, überprüfen Sie jetzt den VIP-Status (virtuelle IP-Adresse) auf dem Master-Knoten, in unserem Fall ist VIP 192.168.1.130
$ ip add show
Die obige Ausgabe bestätigt, dass VIP auf dem Master-Knoten auf seiner enp0s3-Schnittstelle konfiguriert ist. Lassen Sie uns also im nächsten Schritt Keepalived- und Nginx-Tests durchführen.
Schritt 5) Keepalived- und NGINX-Tests
Um den Test durchzuführen, versuchen Sie, mit der virtuellen IP (192.168.1.150) auf den Nginx-Webserver zuzugreifen. Derzeit sollte uns die Nginx-Seite von Knoten 1 angezeigt werden.
Öffnen Sie den Wen-Browser und geben Sie „http://192.168.1.150“ ein und drücken Sie die Eingabetaste,
Versuchen Sie nun, den NGINX-Dienst auf Knoten 1 zu stoppen und zu sehen, ob die virtuelle IP von Knoten 1 auf Knoten 2 umgeschaltet wird, und versuchen Sie dann, mit VIP (192.168.1.150) auf die nginx-Webseite zuzugreifen, und dieses Mal sollte uns die nginx-Seite von Knoten 2 angezeigt werden .
[[email protected] ~]$ sudo systemctl stop nginx [[email protected] ~]$ ip add show
Melden Sie sich bei Knoten 2 an und führen Sie den Befehl ip aus, um die virtuelle IP-Adresse zu überprüfen,
[[email protected] ~]$ ip add show
Versuchen wir nun, über die virtuelle IP auf die Webseite zuzugreifen,
Großartig, oben bestätigt, dass wir den hochverfügbaren NGINX-Webserver mit Keepalived erfolgreich eingerichtet haben. Das war alles aus diesem Artikel, bitte teilen Sie uns Ihr Feedback, Ihre Kommentare und Vorschläge mit.