hoog beschikbare NGINX instellen met KeepAlived op CentOS 8

Nginx is een gratis, open-source en een van de populairste webservers over de hele wereld. Het kan ook gebruikt worden als reverse proxy, load balancer en HTTP cache. De hoge beschikbaarheid stelt een toepassing in staat om werk naar een ander systeem om te leiden bij een storing. Er zijn verschillende technologieën beschikbaar om een hoog beschikbaar systeem op te zetten.

Keepalived is een systeemdaemon die voortdurend diensten of systemen in de gaten houdt en hoge beschikbaarheid bereikt in het geval van storing. Als een node uitvalt dan bedient de tweede node de bronnen.

In deze zelfstudie laat ik je zien hoe je een hoog beschikbare Nginx webserver opzet met KeepAlived op CentOS 8.

Vereisten

  • Twee servers met CentOS 8, een voor de master node en een voor de backup node.
  • Op de server is een root wachtwoord ingesteld.

Installeer Nginx op beide knooppunten

Eerst moet je op beide knooppunten het Nginx pakket installeren. Je kunt het installeren met het volgende commando:

dnf install nginx -y

Als Nginx op beide knooppunten geïnstalleerd is, start dan de Nginx service en zet hem aan om te starten bij het herstarten van het systeem:

systemctl start nginx
systemctl enable nginx

Als je klaar bent, kun je verder gaan met de volgende stap.

Maak een Index.html bestand op beide knooppunten

Vervolgens moet je op beide knooppunten een aangepast index.html bestand maken om elk knooppunt te identificeren.

Maak op de eerste node een index.html bestand met het volgende commando:

echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

Maak op de tweede node een index.html bestand met het volgende commando:

echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

Sla het bestand op en sluit het als je klaar bent.

Installeer en configureer Keepalived

Vervolgens moet je Keepalived op beide knooppunten installeren. Standaard is het Keepalived pakket beschikbaar in de CentOS 8 standaard repository. Je kunt het installeren door het volgende commando uit te voeren:

dnf install keepalived -y

Zodra het keepalived pakket op beide knooppunten geïnstalleerd is, moet je het keepalived standaard configuratiebestand op beide knooppunten bewerken.

Bewerk op de eerste knooppunt het bestand keepalived.conf:

nano /etc/keepalived/keepalived.conf

Verwijder de standaard inhoud en voeg de volgende inhoud toe:

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
  }
}

Sla het bestand op en sluit het als je klaar bent.

Bewerk op de tweede node het keepalived.conf bestand:

nano /etc/keepalived/keepalived.conf

Verwijder de standaard inhoud en voeg de volgende inhoud toe:

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
  }
}

Bewaar en sluit het bestand als je klaar bent Dan moet je een script maken om te controleren of de Nginx dienst draait of niet. Je kunt het maken met het volgende commando:

Opmerking: Vervang zojuist MASTER door BACKUP en 110 door 100 in het bovenstaande configuratiebestand.

nano /bin/check_nginx.sh

Voeg de volgende regels toe:

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

Bewaar en sluit het bestand en stel dan de juiste toestemming in met het volgende commando:

chmod 755 /bin/check_nginx.sh

Start tenslotte de keepalived service en zet hem aan om te starten bij het herstarten van het systeem met het volgende commando:

systemctl start keepalived
systemctl enable keepalived

Je kunt ook de status van keepalived service controleren met het volgende commando:

systemctl status keepalived

Je zou de volgende uitvoer moeten krijgen:

? 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

Je kunt ook de status van het virtuele ip adres op de Master node controleren met het volgende commando:

ip add show

Je zou het virtuele IP adres 192.168.1.10 moeten zien in de volgende uitvoer:

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

Als je klaar bent, kun je verder gaan met de volgende stap.

Configureer Firewall op beide knooppunten

Vervolgens moet je poort 80 toestaan en VRRP toestaan op beide knooppunten. Je kunt dat doen met het volgende commando:

firewall-cmd --permanent --add-service=http
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent

Herlaad vervolgens de firewalld om de veranderingen toe te passen:

firewall-cmd –reload

Verifieer Keepalived

Op dit punt zijn Nginx en Keepalived geïnstalleerd en ingesteld. Het is tijd om te testen of de hoge beschikbaarheid van Nginx werkt of niet.

Open je web browser en ga naar de URL http://your-virtual-ip. Je zou de volgende pagina moeten zien:

Nginx pagina op node 1

Stop nu de Nginx dienst op de Master node en test of het virtuele IP overgeschakeld wordt van Node 1 naar Node 2.

Op de Master node stop je de Nginx dienst met het volgende commando:

systemctl stop nginx

Log vervolgens in op Node2 en controleer het virtuele IP met het volgende commando:

ip add show

Je zou je Virtuele IP in de volgende uitvoer moeten zien:

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

Open nu je Nginx webserver met de URL http://your-virtual-ip. Je zou de Node2 pagina moeten zien:

Nginx op node 2

Conclusie

Gefeliciteerd! Je hebt met succes een hoog beschikbare Nginx server opgezet met Keepalived. Ik hoop dat je nu genoeg kennis hebt om een hoog beschikbare Nginx server in een productie omgeving op te zetten.