Einrichtung von hochverfügbarem NGINX mit KeepAlived auf CentOS 8
Nginx ist ein freier, quelloffener und einer der beliebtesten Webserver auf der ganzen Welt. Er kann auch als Reverse Proxy, Load Balancer und HTTP-Cache verwendet werden. Die Hochverfügbarkeit ermöglicht es einer Anwendung, im Falle eines Ausfalls die Arbeit auf ein anderes System umzuleiten. Es stehen verschiedene Technologien zur Verfügung, um ein hochverfügbares System einzurichten.
Keepalived ist ein System-Daemon, der Dienste oder Systeme kontinuierlich überwacht und im Falle eines Ausfalls eine hohe Verfügbarkeit erreicht. Wenn ein Knoten ausfällt, dann bedient der zweite Knoten die Ressourcen.
In diesem Tutorial zeige ich Ihnen, wie Sie einen hochverfügbaren Nginx-Webserver mit KeepAlived auf CentOS 8 einrichten können.
Voraussetzungen
- Zwei Server unter CentOS 8, einer für den Master-Knoten und einer für den Backup-Knoten.
- Ein Root-Passwort ist auf Ihrem Server konfiguriert.
Installieren Sie Nginx auf beiden Knoten
Zunächst müssen Sie das Nginx-Paket auf beiden Knoten installieren. Sie können es mit dem folgenden Befehl installieren:
dnf install nginx -y
Sobald Nginx auf beiden Knoten installiert ist, starten Sie den Nginx-Dienst und aktivieren Sie ihn so, dass er beim Neustart des Systems gestartet wird:
systemctl start nginx systemctl enable nginx
Wenn Sie damit fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Erstellen der Datei index.html auf beiden Knoten
Als nächstes müssen Sie auf beiden Knoten eine benutzerdefinierte index.html-Datei erstellen, um jeden Knoten zu identifizieren.
Erstellen Sie auf dem ersten Knoten eine index.html-Datei mit dem folgenden Befehl:
echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
Auf dem zweiten Knoten erstellen Sie eine index.html-Datei mit dem folgenden Befehl:
echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Installieren und konfigurieren Sie Keepalived
Als nächstes müssen Sie Keepalived auf beiden Knoten installieren. Standardmäßig ist das Keepalived-Paket im Standard-Repository von CentOS 8 verfügbar. Sie können es installieren, indem Sie den folgenden Befehl ausführen:
dnf install keepalived -y
Sobald das Keepalived-Paket auf beiden Knoten installiert ist, müssen Sie die keepalived-Standardkonfigurationsdatei auf beiden Knoten bearbeiten.
Auf dem ersten Knoten bearbeiten Sie die Datei keepalived.conf:
nano /etc/keepalived/keepalived.conf
Entfernen Sie den Standardinhalt und fügen Sie den folgenden Inhalt hinzu:
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 eth0 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.10/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Bearbeiten Sie auf dem zweiten Knoten die Datei „keepalived.conf“:
nano /etc/keepalived/keepalived.conf
Entfernen Sie den Standardinhalt und fügen Sie den folgenden Inhalt hinzu:
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 BACKUP interface eth0 virtual_router_id 151 priority 100 # The virtual ip address shared between the two NGINX Web Server which will float virtual_ipaddress { 192.168.1.10/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Speichern und schließen Sie die Datei. Anschließend müssen Sie ein Skript erstellen, das überprüft, ob der Nginx-Dienst läuft oder nicht. Sie können es mit dem folgenden Befehl erstellen:
Hinweis: Ersetzen Sie einfach MASTER durch BACKUP und 110 durch 100 in der obigen Konfigurationsdatei.
nano /bin/check_nginx.sh
Fügen Sie die folgenden Zeilen hinzu:
#!/bin/sh if [ -z "`pidof nginx`" ]; then exit 1 fi
Speichern und schließen Sie die Datei und setzen Sie dann die entsprechenden Berechtigungen mit dem folgenden Befehl:
chmod 755 /bin/check_nginx.sh
Starten Sie abschließend den keepalived-Dienst und aktivieren Sie, dass er beim Neustart des Systems gestartet wird, indem Sie den folgenden Befehl eingeben:
systemctl start keepalived systemctl enable keepalived
Sie können den Status des keepalived-Dienstes auch mit dem folgenden Befehl überprüfen:
systemctl status keepalived
Sie sollten die folgende Ausgabe erhalten:
? keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 3142 (keepalived) Tasks: 2 (limit: 12524) Memory: 2.1M CGroup: /system.slice/keepalived.service ??3142 /usr/sbin/keepalived -D ??3143 /usr/sbin/keepalived -D Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs. Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Sie können auch den Status der virtuellen IP-Adresse auf dem Master-Knoten mit dem folgenden Befehl überprüfen:
ip add show
In der folgenden Ausgabe sollten Sie die virtuelle IP-Adresse 192.168.1.10 sehen:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.1.10/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:2dff:fe3a:209b/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff inet6 fe80::200:aff:fe3a:209b/64 scope link valid_lft forever preferred_lft forever
Wenn Sie damit fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Konfigurieren Sie die Firewall auf beiden Knoten
Als nächstes müssen Sie auf beiden Knoten den Port 80 zulassen und VRRP erlauben. Sie können dies mit dem folgenden Befehl tun:
firewall-cmd --permanent --add-service=http firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
Laden Sie anschließend die Firewalld neu, um die Änderungen zu übernehmen:
firewall-cmd –reload
Verify Keepalived
An diesem Punkt sind Nginx und Keepalived installiert und konfiguriert. Es ist an der Zeit zu testen, ob die Nginx-Hochverfügbarkeit funktioniert oder nicht.
Öffnen Sie Ihren Webbrowser und rufen Sie die URL http://your-virtual-ip auf. Sie sollten die folgende Seite sehen:
Stoppen Sie nun den Nginx-Dienst auf dem Master-Knoten und testen Sie, ob die virtuelle IP von Knoten 1 auf Knoten 2 umgeschaltet wird.
Stoppen Sie auf dem Master-Knoten den Nginx-Dienst mit dem folgenden Befehl:
systemctl stop nginx
Melden Sie sich anschließend bei Knoten 2 an und überprüfen Sie die virtuelle IP mit dem folgenden Befehl:
ip add show
Sie sollten Ihre virtuelle IP in der folgenden Ausgabe sehen:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.1.10/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:2dff:fe3a:2637/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff inet6 fe80::200:aff:fe3a:2637/64 scope link valid_lft forever preferred_lft forever
Rufen Sie nun Ihren Nginx-Webserver über die URL http://your-virtual-ip auf. Sie sollten die Node2-Seite sehen:
Fazit
Herzlichen Glückwunsch! Sie haben erfolgreich einen hochverfügbaren Nginx-Server mit Keepalived aufgesetzt. Ich hoffe, Sie haben nun genug Wissen, um einen hochverfügbaren Nginx-Server in einer Produktionsumgebung einzurichten.