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:

Nginx-Seite auf Knoten 1

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:

Nginx auf Knoten 2

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.

Das könnte dich auch interessieren …