GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare NGINX ad alta disponibilità con KeepAlived in Linux

Come sappiamo, NGINX è un server web molto apprezzato che può essere utilizzato anche come proxy inverso, bilanciatore di carico e cache HTTP. In questo articolo, dimostreremo come configurare il server Web NGINX ad alta disponibilità (HA) con keepalived in Linux. Keepalived funziona su VRRP (Virtual Router Redundancy Protocol) che consente il failover di un IP statico tra due sistemi Linux.

Di seguito sono riportati i dettagli del mio laboratorio per NGINX HA:

  • Nodo 1 – 192.168.1.130 – nginx1.example.com – CentOS 8 minimo / RHEL 8
  • Nodo 2 – 192.168.1.140 – nginx2.example.com – CentOS 8 minimo / RHEL 8
  • IP virtuale (VIP) – 192.168.1.150
  • sudo utente pkumar
  • Firewalld abilitato
  • SELinux in esecuzione

Passiamo ai passaggi di installazione e configurazione,

Passaggio 1) Installa NGINX Web Server dalla riga di comando

Il pacchetto NGINX è disponibile nei repository CentOS 8 / RHEL 8 predefiniti, quindi esegui sotto il comando dnf su entrambi i nodi per installare il server web nginx

$ sudo dnf install -y nginx

Per CentOS 7/RHEL 7

Il pacchetto NGINX non è disponibile nei repository CentOS 7 / RHEL 7 predefiniti, quindi per installarlo dobbiamo prima abilitare il repository epel. Esegui il seguente comando su entrambi i nodi

$ sudo yum install epel-release -y
$ sudo yum install -y nginx

Per Ubuntu/Debian

Per le distribuzioni Linux basate su Debian, il pacchetto del server web nginx è disponibile nei repository di pacchetti predefiniti, quindi per installare nginx, esegui

$ sudo apt update
$ sudo apt install -y nginx

Passaggio 2) Configura il file index.html personalizzato per entrambi i nodi

Creiamo un file index.html personalizzato per entrambi i nodi in modo da poter identificare facilmente quale server sta servendo il sito web durante l'accesso tramite ip virtuale.

Per il nodo 1, esegui il seguente comando echo,

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html

Per il nodo 2, esegui

[[email protected] ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html

Fase 3) Consenti la porta NGINX nel firewall e avvia il suo servizio

Nel caso in cui il firewall sia abilitato e in esecuzione su entrambi i nodi, consenti la porta 80 eseguendo i seguenti comandi,

Per il sistema CentOS/RHEL

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd –reload

Per sistema Ubuntu/Debian

$ sudo ufw allow 'Nginx HTTP'

Avvia e abilita il servizio nginx eseguendo sotto i comandi di comando su entrambi i nodi,

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Testare il server Web NGINX di entrambi i nodi eseguendo il comando curl dall'esterno,

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

Perfetto, l'output del comando sopra conferma che nginx è in esecuzione e accessibile dall'esterno con l'indirizzo IP del sistema.

Passaggio 4) Installa e configura Keepalived

Per i sistemi CentOS / RHEL, il pacchetto keepalived e le sue dipendenze sono disponibili nei repository di pacchetti predefiniti, quindi la sua installazione è semplice, basta eseguire il comando sotto su entrambi i nodi.

$ sudo dnf install -y keepalived       // CentOS 8/ RHEL 8
$ sudo yum install -y keepalived      // CentOS 7 / RHEL 7

Per sistema Ubuntu/Debian,

$ apt install -y keepalived

Una volta installato keepalived, configuralo modificando il suo file di configurazione '/etc/keepalived/keepalived.conf'. Manterremo il nodo 1 come nodo principale e il nodo 2 come nodo di backup.

Fai il backup del file di configurazione,

[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org

Sostituisci il contenuto di keepalived.conf con il seguente:

[[email protected] ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf
[[email protected] ~]$ sudo vi /etc/keepalived/keepalived.conf

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

Ora crea uno script con i seguenti contenuti che verificherà se il servizio nginx è in esecuzione o meno. Keepalived controllerà sempre l'output dello script check_nginx.sh, se rileva che il servizio nginx è interrotto o non risponde, sposterà l'indirizzo IP virtuale sul nodo di backup.

[[email protected] ~]$ sudo vi /bin/check_nginx.sh
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

salva e chiudi il file e imposta i permessi richiesti con il comando chmod,

[[email protected] ~]$ sudo chmod 755 /bin/check_nginx.sh

Ora copia i file keepalived.conf e check_nginx.sh dal nodo 1 al nodo 2 usando il seguente comando scp.

[[email protected] ~]$ scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
[[email protected] ~]$ scp /bin/check_nginx.sh [email protected]0:/bin/

Una volta che i file sono stati copiati, accedi al Nodo 2 e apporta un paio di modifiche nel file keepalived.conf. Cambia lo stato da MASTER a BACKUP e abbassa la priorità impostandolo come 100. Dopo aver apportato le modifiche, keepalived.conf sul nodo 2 apparirà come sotto,

Nel caso in cui il firewall del sistema operativo sia in esecuzione, consenti VRRP eseguendo i seguenti comandi,

Nota – Esegui questi comandi su entrambi i nodi

Per sistemi CentOS/RHEL

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
$ sudo firewall-cmd --reload

Per sistemi Ubuntu/Debian

Consenti VRRP eseguendo quanto segue, dal nodo master (nodo 1), esegui

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'

Dal nodo di backup/slave (nodo 2)

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'

Ora finalmente avvia il servizio keepalive eseguendo sotto i comandi systemctl da entrambi i nodi,

$ sudo systemctl start keepalived
$ sudo systemctl enable keepalived

Verifica il servizio KeepAlive eseguendo di seguito:

$ sudo systemctl status keepalived

Perfetto, ora verifica lo stato VIP (indirizzo IP virtuale) sul nodo principale, nel nostro caso VIP è 192.168.1.130

$ ip add show

L'output sopra conferma che VIP è configurato sul nodo master sulla sua interfaccia enp0s3. Quindi, esegui il test keepalived e nginx nel passaggio successivo.

Fase 5) Keepalived e test NGINX

Per eseguire il test, prova ad accedere al server web nginx con IP virtuale (192.168.1.150), attualmente dovrebbe mostrarci la pagina nginx del nodo 1.

Apri il browser wen e digita "http://192.168.1.150" e premi invio,

Ora prova a fermare il servizio NGINX sul nodo 1 e vedi se l'IP virtuale è passato dal nodo 1 al nodo 2, quindi prova ad accedere alla pagina web di nginx con VIP (192.168.1.150) e questa volta dovrebbe mostrarci la pagina nginx dal nodo 2 .

[[email protected] ~]$ sudo systemctl stop nginx
[[email protected] ~]$ ip add show

Accedi al nodo 2 ed esegui il comando ip per verificare l'indirizzo IP virtuale,

[[email protected] ~]$ ip add show

Ora, proviamo ad accedere alla pagina web utilizzando l'ip virtuale,

Ottimo, quanto sopra conferma che abbiamo impostato correttamente il server Web NGINX ad alta disponibilità con keepalived. Questo è tutto da questo articolo, condividi il tuo feedback, commenti e suggerimenti.


Linux
  1. Come installare Nginx Web Server su Linux

  2. Come impostare i privilegi di Sudo per l'utente in Linux

  3. Come configurare una semplice app nodejs con nginx e pm2 sul server Ubuntu

  4. Come installare ModSecurity con Nginx su Rocky Linux 8

  5. Come installare e configurare lo stack MERN con Nginx su Ubuntu 20.04

Configura il bilanciamento del carico con HAProxy, Nginx e Keepalived in Linux

Come eseguire un alias con Sudo in Linux

Come installare Apache Tomcat 10 su Ubuntu 20.04 con Nginx

Come installare Apache Tomcat 10 su Ubuntu 22.04 con Nginx

Cron Vs Anacron:come configurare Anacron su Linux (con un esempio)

Come configurare Logstash su Linux con ElasticSearch, Redis, Nginx