Ricerca nel sito web

Come configurare HAProxy come bilanciatore del carico per Nginx su CentOS 8


Per garantire la massima disponibilità, scalabilità e prestazioni elevate delle applicazioni Web, è ormai comune implementare tecnologie che introducono ridondanza, come il clustering di server e il bilanciamento del carico. Ad esempio, configurando un cluster di server che eseguono tutti le stesse applicazioni e quindi distribuendo uno o più bilanciatori di carico davanti a loro per distribuire il traffico.

HAProxy è un bilanciatore del carico TCP/HTTP open source, potente, ad alte prestazioni, affidabile, sicuro e ampiamente utilizzato, un server proxy e un terminatore SSL/TLS creato per siti web ad altissimo traffico. Funziona in modo affidabile su Linux, Solaris, FreeBSD, OpenBSD e sui sistemi operativi AIX.

Questa guida mostra come configurare un bilanciatore del carico dedicato ad alta disponibilità con HAProxy su CentOS 8 per controllare il traffico in un cluster di server web NGINX. Viene inoltre illustrato come configurare la terminazione SSL/TLS in HAProxy.

Prerequisiti:

Un totale di 4 server con installazione minima di CentOS 8.

Configurazione dell'ambiente di prova

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Passaggio 1: configurazione del server HTTP Nginx sui computer client

1. Accedi a tutti i tuoi computer client CentOS 8 e installa il server web Nginx utilizzando il gestore pacchetti dnf come mostrato.

dnf install Nginx

2. Successivamente, avvia il servizio Nginx, per ora, abilitalo all'avvio automatico all'avvio del sistema e conferma che è attivo e funzionante controllandone lo stato, utilizzando systemctl comandi (fallo su tutte le macchine client).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Inoltre, se il servizio firewalld è in esecuzione su tutte le macchine client (cosa che puoi verificare eseguendo systemctl start firewalld), devi aggiungere HTTP e Servizi HTTPS nella configurazione del firewall per consentire alle richieste dal bilanciatore di carico di passare attraverso il firewall ai server web Nginx. Quindi ricarica il servizio firewalld per rendere effettive le nuove modifiche (fallo su tutte le macchine client).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Successivamente, apri un browser web sui tuoi computer locali e verifica se l'installazione di Nginx funziona correttamente. Utilizza gli IP del client per navigare, una volta visualizzata la pagina di test di Nginx, significa che il server web installato sul computer client funziona correttamente.

5. Successivamente, dobbiamo creare pagine di test sui computer client che utilizzeremo in seguito per testare la configurazione di HAProxy.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Passaggio 2: installazione e configurazione di HAProxy Server su CentOS 8

6. Ora installa il pacchetto HAProxy sul server HAProxy eseguendo il seguente comando.

dnf install haproxy

7. Successivamente, avvia il servizio HAProxy, abilitalo all'avvio automatico all'avvio del sistema e verificane lo stato.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Ora configureremo HAProxy utilizzando il seguente file di configurazione.

vi /etc/haproxy/haproxy.cfg

Il file di configurazione è diviso in quattro sezioni principali.

  • impostazioni globali: imposta i parametri a livello di processo.
  • defaults: questa sezione imposta i parametri predefiniti per tutte le altre sezioni dopo la sua dichiarazione.
  • frontend: questa sezione descrive un insieme di socket in ascolto che accettano connessioni client.
  • Backend: questa sezione descrive un insieme di server a cui il proxy si connetterà per inoltrare le connessioni in entrata.

Per comprendere le opzioni in impostazioni globali e predefinite, leggere la documentazione di HAProxy (link fornito alla fine dell'articolo). Per questa guida utilizzeremo le impostazioni predefinite.

Configurazione della registrazione HAProxy

9. HAProxy, una volta distribuito, svolgerà un ruolo significativo nella tua infrastruttura IT, pertanto la configurazione della registrazione per esso è un requisito di base; questo ti consente di ottenere informazioni dettagliate su ciascuna connessione ai tuoi server web back-end.

Il parametro log (evidenziato nello screenshot seguente) dichiara un server Syslog globale (come rsyslog quello predefinito in CentOS) che riceverà messaggi di registro. Qui è possibile dichiarare più di un server.

La configurazione predefinita punta a localhost (127.0.0.1) e local2 è il codice struttura predefinito utilizzato per identificare i messaggi di registro HAProxy in rsyslog.

10. Successivamente, devi indicare al server rsyslog come ricevere ed elaborare i messaggi di registro HAProxy. Apri il file di configurazione rsyslog in /etc/rsyslog.conf o crea un nuovo file nella directory /etc/rsyslog.d, ad esempio /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Copia e incolla la seguente configurazione per raccogliere il registro con UDP sulla porta predefinita 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Aggiungi anche queste righe per indicare a rsyslog di scrivere su due file di registro separati in base alla gravità, dove local2 è il codice della struttura definito nella configurazione HAProxy sopra.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Salva il file e chiudilo. Quindi riavvia il servizio rsyslog per applicare le modifiche recenti.

systemctl restart rsyslog

Configurazione front-end e back-end di HAProxy

12. In questa sezione, dimostreremo come configurare i proxy front-end e back-end. Torna al file di configurazione HAProxy e modifica le sezioni front-end e back-end predefinite come segue. Non entreremo nella spiegazione dettagliata di ogni parametro, potete sempre fare riferimento alla documentazione ufficiale.

La seguente configurazione definisce una sezione di ascolto utilizzata per fornire la pagina Statistiche HAProxy. Il parametro bind assegna un ascoltatore a un determinato indirizzo IP (* per tutti in questo caso) e porta (9000 ).

L'impostazione abilita delle statistiche abilita la pagina delle statistiche a cui si accederà utilizzando l'URI /stats (ad esempio http://server_ip:9000/stats) .

L'impostazione au delle statistiche viene utilizzata per aggiungere un'autenticazione di base all'accesso alla pagina (sostituisci haproxy e Lostp@1ss con un nome utente e una password tuoi). scelta).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. La configurazione successiva definisce una sezione del frontend chiamata TL (puoi dare un nome a tuo piacimento). Il parametro mode definisce la modalità in cui opera HAProxy.

Il parametro acl (Access Control List) viene utilizzato per prendere una decisione in base al contenuto estratto dalla richiesta. In questo esempio, la richiesta è considerata semplice HTTP se non è effettuata tramite SSL.

Quindi l'impostazione http-request set-header viene utilizzata per aggiungere un'intestazione HTTP alla richiesta. Ciò aiuta a informare Nginx che la richiesta iniziale è stata effettuata tramite HTTP (o tramite la porta 80).

La direttiva default_backend o use_backend definisce i server backend, in questo caso, a cui fa riferimento TL_web_servers.

Tieni presente che HAProxy restituirà un "Errore servizio non disponibile 503" se una richiesta non viene instradata da un use_backend o default_backend direttiva.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Quindi dobbiamo definire una sezione di backend in cui l'impostazione balance definisce come HAProxy seleziona i server backend per elaborare una richiesta se no il metodo di persistenza sovrascrive tale selezione.

La direttiva cookie abilita la persistenza basata sui cookie, istruisce HAProxy a inviare un cookie denominato SERVERID al client e per associarlo all'ID del server che ha dato la risposta iniziale.

La direttiva server viene utilizzata per definire i server upstream nel formato sever_name (ad esempio websrv1), server_IP:porta e opzioni.

Un'opzione chiave è check che dice a HAProxy di continuare a controllare la disponibilità di un server e di riportarlo nella pagina delle statistiche.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Commenta qualsiasi altra sezione di frontend e backend come mostrato nello screenshot che segue. Salva il file e chiudilo.

15. Ora riavvia il servizio HAProxy per applicare le nuove modifiche.

systemctl restart haproxy

16. Successivamente, assicurati che HTTP (porta 80) e HTTPS (porta 433) i servizi vengono aperti nel firewall per accettare le richieste del client come segue. Inoltre, apri la porta 9000 nel firewall per accedere alla pagina delle statistiche e ricaricare le impostazioni del firewall.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Passaggio 3: test della configurazione di HAProxy e visualizzazione delle statistiche

17. Ora è il momento di testare la configurazione HAPrxoy. Sul computer desktop locale da cui accedi a tutti i server, aggiungi la seguente riga nel file /etc/hosts per consentirci di utilizzare il dominio del sito fittizio.

10.42.0.247  www.tecmint.lan

18. Quindi apri un browser e naviga utilizzando l'indirizzo del server o il dominio del sito.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Per accedere alla pagina delle statistiche HAProxy, utilizzare il seguente indirizzo.

http://10.42.0.247:9000/stats

Quindi utilizzare il nome utente e la password definiti nel file di configurazione HAProxy (fare riferimento al parametro stats auth).

Dopo un accesso riuscito, verrai indirizzato alla pagina delle statistiche HAProxy che mostra le metriche che coprono lo stato dei tuoi server, i tassi di richiesta attuali, i tempi di risposta e molto altro ancora.

Per dimostrare come funziona il rapporto sullo stato relativo ai codici colore, abbiamo inserito uno dei server back-end.

Passaggio 4: configurazione di HTTPS in HAProxy utilizzando un certificato SSL autofirmato

20. In questa sezione finale, dimostreremo come configurare SSL/TLS per proteggere tutte le comunicazioni tra il server e il client HAProxy. HAProxy supporta quattro principali modalità di configurazione HTTPS, ma per questa guida utilizzeremo l'offload SSL/TLS.

Nella modalità di offload SSL/TLS, HAProxy decifra il traffico sul lato client e si connette in chiaro ai server backend.

Inizieremo creando il certificato e la chiave come mostrato (rispondi alle domande di conseguenza in base ai dettagli della tua azienda durante la creazione del certificato, come evidenziato nello screenshot).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Successivamente, apri il file di configurazione HAProxy (/etc/haproxy/haproxy.cfg) e modifica la sezione front-end.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Salva il file e chiudilo.

22. Quindi riavviare il servizio HAProxy per applicare le nuove modifiche.

systemctl restart haproxy.service

23. Successivamente, apri un browser web e prova ad accedere nuovamente al sito. Il browser mostrerà un errore a causa del certificato autofirmato, fai clic su Avanzate per procedere.

È tutto per ora! Ogni applicazione Web ha una propria serie di requisiti, è necessario progettare e configurare il bilanciamento del carico per adattarlo alla propria infrastruttura IT e ai requisiti dell'applicazione.

Per ottenere ulteriori informazioni su alcune delle opzioni di configurazione utilizzate in questa guida e, in generale, su come utilizzare HAProxy, consultare la documentazione ufficiale dell'edizione community di HAProxy o la documentazione della versione aziendale di HAProxy. Puoi pubblicare eventuali domande o pensieri tramite il modulo di feedback sottostante.