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 ad alta disponibilità.
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 ad alta disponibilità con KeepAlived su CentOS 8.
Prerequisiti
- Due server che eseguono CentOS 8, uno per il nodo master e uno per il nodo di backup.
- Sul tuo server è configurata una password di root.
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 all'avvio al riavvio del sistema:
systemctl start nginx
systemctl enable nginx
Una volta terminato, puoi procedere al passaggio successivo.
Crea file 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 keepalived su entrambi i nodi, sarà necessario modificare il file di configurazione predefinito keepalived 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 sopra.
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 all'avvio al riavvio del sistema utilizzando il seguente comando:
systemctl start keepalived
systemctl enable keepalived
Puoi anche controllare lo stato del servizio keepalive utilizzando 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
Puoi anche verificare lo stato dell'indirizzo IP virtuale sul nodo Master usando 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 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
Quindi, ricarica il firewalld per applicare le modifiche:
firewall-cmd –reload
Verifica Keepalived
A questo punto, Nginx e Keepalived sono installati e configurati. È ora di verificare se l'alta disponibilità di Nginx funziona o meno.
Apri il tuo browser web e accedi all'URL http://tuo-ip-virtuale . 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 comando seguente:
systemctl stop nginx
Quindi, 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 impostato con successo un server Nginx ad alta disponibilità con Keepalived. Spero che ora tu abbia abbastanza conoscenze per configurare un server Nginx altamente disponibile in un ambiente di produzione.