Ricerca nel sito web

Come configurare NGINX a disponibilità elevata con KeepAlived su CentOS 8


Su questa pagina

  1. Prerequisiti
  2. Installa Nginx su entrambi i nodi
  3. Crea il file Index.html su entrambi i nodi
  4. Installa e configura Keepalived
  5. Configura il firewall su entrambi i nodi
  6. Verifica Keepalived
  7. Conclusione

Nginx è un server web gratuito, open source e uno dei più popolari al mondo. Può anche essere utilizzato come proxy inverso, bilanciamento del carico e cache HTTP. L'elevata disponibilità consente a un'applicazione di reindirizzare il lavoro a un altro sistema in caso di errore. Sono disponibili diverse tecnologie per configurare un sistema altamente disponibile.

Keepalived è un demone di sistema che monitora continuamente servizi o sistemi e raggiunge un'elevata disponibilità in caso di guasto. Se un nodo è inattivo, il secondo nodo ha servito le risorse.

In questo tutorial, ti mostrerò come configurare un server Web Nginx altamente disponibile con KeepAlived su CentOS 8.

Prerequisiti

  • Due server che eseguono CentOS 8, uno per il nodo master e uno per il nodo di backup.
  • Una password di root è configurata sul tuo server.

Installa Nginx su entrambi i nodi

Innanzitutto, dovrai installare il pacchetto Nginx in entrambi i nodi. Puoi installarlo usando il seguente comando:

dnf install nginx -y

Una volta che Nginx è stato installato su entrambi i nodi, avvia il servizio Nginx e abilitalo per l'avvio al riavvio del sistema:

systemctl start nginx
systemctl enable nginx

Una volta terminato, puoi procedere al passaggio successivo.

Crea un file Index.html su entrambi i nodi

Successivamente, dovrai creare un file index.html personalizzato su entrambi i nodi per identificare ciascun nodo.

Sul primo nodo, crea un file index.html con il seguente comando:

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

Sul secondo nodo, crea un file index.html con il seguente comando:

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

Salva e chiudi il file quando hai finito.

Installa e configura Keepalived

Successivamente, dovrai installare Keepalived su entrambi i nodi. Per impostazione predefinita, il pacchetto Keepalived è disponibile nel repository predefinito di CentOS 8. Puoi installarlo eseguendo il seguente comando:

dnf install keepalived -y

Una volta installato il pacchetto keepalive su entrambi i nodi, sarà necessario modificare il file di configurazione predefinito keepalive su entrambi i nodi.

Sul primo nodo, modifica il file keepalived.conf:

nano /etc/keepalived/keepalived.conf

Rimuovi i contenuti predefiniti e aggiungi i seguenti contenuti:

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

Salva e chiudi il file quando hai finito.

Sul secondo nodo, modifica il file keepalived.conf:

nano /etc/keepalived/keepalived.conf

Rimuovi i contenuti predefiniti e aggiungi i seguenti contenuti:

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

Salva e chiudi il file, quindi dovrai creare uno script per verificare se il servizio Nginx è in esecuzione o meno. Puoi crearlo usando il seguente comando:

Nota: ho appena sostituito MASTER con BACKUP e 110 con 100 nel file di configurazione precedente.

nano /bin/check_nginx.sh

Aggiungi le seguenti righe:

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

Salva e chiudi il file, quindi imposta i permessi appropriati con il seguente comando:

chmod 755 /bin/check_nginx.sh

Infine, avvia il servizio keepalive e abilitalo per l'avvio al riavvio del sistema utilizzando il seguente comando:

systemctl start keepalived
systemctl enable keepalived

Puoi anche controllare lo stato del servizio keepalive usando il seguente comando:

systemctl status keepalived

Dovresti ottenere il seguente output:

? 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

È inoltre possibile verificare lo stato dell'indirizzo IP virtuale sul nodo master utilizzando il seguente comando:

ip add show

Dovresti vedere l'indirizzo IP virtuale 192.168.1.10 nel seguente output:

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

Una volta terminato, puoi procedere al passaggio successivo.

Configura il firewall su entrambi i nodi

Successivamente, dovrai consentire la porta 80 e consentire VRRP su entrambi i nodi. Puoi farlo usando il seguente comando:

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

Successivamente, ricarica il firewalld per applicare le modifiche:

firewall-cmd –reload

Verifica Keepalived

A questo punto, Nginx e Keepalived sono installati e configurati. È tempo di verificare se l'elevata disponibilità di Nginx funziona o meno.

Apri il tuo browser web e accedi all'URL http://your-virtual-ip. Dovresti vedere la seguente pagina:

Ora, interrompi il servizio Nginx sul nodo master e verifica se l'IP virtuale è passato dal nodo 1 al nodo 2.

Sul nodo master, arresta il servizio Nginx utilizzando il seguente comando:

systemctl stop nginx

Successivamente, accedi a Node2 e verifica l'IP virtuale utilizzando il seguente comando:

ip add show

Dovresti vedere il tuo IP virtuale nel seguente output:

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

Ora accedi al tuo server web Nginx utilizzando l'URL http://your-virtual-ip. Dovresti vedere la pagina Node2:

Conclusione

Congratulazioni! hai configurato correttamente un server Nginx altamente disponibile con Keepalived. Spero che ora tu abbia abbastanza conoscenze per configurare un server Nginx altamente disponibile in un ambiente di produzione.