Per garantire la massima disponibilità, scalabilità e prestazioni elevate delle applicazioni Web, è ormai comune implementare tecnologie che introducono la ridondanza, come il clustering dei server e il bilanciamento del carico. Ad esempio, configurando un cluster di server che eseguono tutti le stesse applicazioni e quindi distribuendo i sistemi di bilanciamento del carico davanti a loro per distribuire il traffico.
HAProxy è un TCP/HTTP open source, potente, ad alte prestazioni, affidabile, sicuro e ampiamente utilizzato ad alta disponibilità bilanciatore di carico, server proxy e terminatore SSL/TLS creato per siti Web ad alto traffico. Funziona in modo affidabile su Linux , Solaris , FreeBSD , OpenBSD così come i sistemi operativi AIX.
Questa guida mostra come configurare un sistema di bilanciamento del carico ad alta disponibilità dedicato con HAProxy su CentOS 8 per controllare il traffico in un cluster di NGINX server web. Viene inoltre illustrato come configurare SSL/TLS risoluzione in HAProxy .
Prerequisiti:
Un totale di 4 server con installazione minima di CentOS 8.
Impostazione 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
Fase 1:configurazione del server HTTP Nginx sui computer client
1. Accedi a tutti i tuoi CentOS 8 macchine client e installare Nginx server web utilizzando il gestore di pacchetti dnf come mostrato.
# dnf install Nginx
2. Quindi, avvia Nginx service, per ora, abilitalo per l'avvio automatico all'avvio del sistema e conferma che sia attivo e funzionante controllandone lo stato, usando i comandi systemctl (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 (che puoi verificare eseguendo systemctl start firewalld), devi aggiungere il HTTP e HTTPS servizi nella configurazione del firewall per consentire alle richieste dal sistema di bilanciamento del carico di passare attraverso il firewall a Nginx server web. Quindi ricarica il firewalld service per effettuare le nuove modifiche (farlo 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. Quindi, apri un browser web sui tuoi computer locali e verifica se il Nginx l'installazione funziona bene. Usa gli IP del client per navigare, una volta visualizzato il Nginx pagina di test, significa che il web server installato sulla macchina client funziona correttamente.
Prova l'installazione di Nginx su tutte le macchine client CentOS 8
5. Successivamente, dobbiamo creare pagine di test sui computer client che utilizzeremo in seguito per testare HAProxy configurazione.
----------- 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
Fase 2:installazione e configurazione di HAProxy Server su CentOS 8
6. Ora installa HAProxy pacchetto su HAProxy server eseguendo il comando seguente.
# dnf install haproxy
7. Quindi, avvia HAProxy servizio, abilitalo per l'avvio automatico all'avvio del sistema e verifica il suo stato.
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy
Verifica lo stato HAProxy in CentOS 8
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 parametri a livello di processo.
- predefiniti – questa sezione imposta i parametri di default per tutte le altre sezioni successive alla sua dichiarazione.
- front-end – questa sezione descrive un insieme di socket in ascolto che accettano connessioni client.
- Backend – questa sezione descrive un insieme di server a cui si connetterà il proxy per inoltrare le connessioni in entrata.
Per comprendere le opzioni in impostazioni globali e predefiniti , leggi la documentazione HAProxy (link fornito a fine articolo). Per questa guida utilizzeremo le impostazioni predefinite.
Configurazione della registrazione HAProxy
9. HAProxy quando una volta distribuito giocherà un ruolo significativo nella tua infrastruttura IT, quindi configurarne la registrazione è un requisito di base; questo ti consente di ottenere informazioni dettagliate su ogni connessione ai tuoi server web di back-end.
Il parametro di registro (evidenziato nello screenshot seguente) dichiara un Syslog globale server (come rsyslog l'impostazione predefinita in CentOS) che riceverà i 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 .
Parametro registro predefinito HAProxy
10. Successivamente, devi informare il rsyslog server come ricevere ed elaborare HAProxy messaggi di registro. Apri il file di configurazione di rsyslog in /etc/rsyslog.conf oppure crea un nuovo file all'interno di /etc/rsyslog.d directory, 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 istruire rsyslog per scrivere in due file di registro separati in base alla gravità, dove local2 è il codice 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 rsyslog servizio per applicare le modifiche recenti.
# systemctl restart rsyslog
Configurazione di HAProxy Front-end e Back-end
12. In questa sezione dimostreremo come configurare i proxy front-end e back-end. Torna a HAProxy file di configurazione e modificare le sezioni front-end e back-end predefinite come segue. Non entreremo in una spiegazione dettagliata di ogni parametro, puoi sempre fare riferimento alla documentazione ufficiale.
La configurazione seguente definisce un ascolto sezione utilizzata per pubblicare le statistiche HAProxy pagina. Il vincolo parametro assegna un listener a un determinato indirizzo IP (*
per tutti in questo caso) e porta (9000 ).
Le statistiche abilitano l'impostazione abilita la pagina delle statistiche a cui si accederà utilizzando l'URI /stats (cioè http://server_ip:9000/stats
).
Le statistiche auth l'impostazione viene utilizzata per aggiungere un'autenticazione di base quando si accede alla pagina (sostituire haproxy e [email protetta] con un nome utente e una password a tua scelta).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:[email protected]
13. La configurazione successiva definisce una sezione frontend chiamata TL (puoi dare un nome di tuo gradimento). La modalità parametro definisce la modalità in cui opera HAProxy.
Il acl Il parametro (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 è effettuato su SSL .
Quindi l'intestazione del set di richieste http l'impostazione viene utilizzata per aggiungere un'intestazione HTTP alla richiesta. Questo aiuta a informare Nginx che la richiesta iniziale è stata effettuata tramite HTTP (o tramite la porta 80 ).
Il backend_predefinito o usa_backend La direttiva definisce i server di backend, in questo caso, a cui fa riferimento TL_web_servers .
Tieni presente che HAProxy restituirà un "errore 503 Servizio non disponibile ” 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 il bilancia l'impostazione definisce come HAProxy seleziona i server back-end per elaborare una richiesta se nessun metodo di persistenza ha la precedenza su quella selezione.
Il cookie abilita basato sui cookie persistenza, indica HAProxy per inviare un cookie denominato SERVERID al cliente e di associarlo all'ID del server che ha fornito la risposta iniziale.
Il server La direttiva viene utilizzata per definire i server upstream nel formato nome_server (ad es. websrv1 ), IP_server:porta e opzioni .
Un'opzione chiave è controlla che dice HAProxy per continuare a controllare la disponibilità di un server e segnalare 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.
Configurazione di HAProxy Front-end e Back-end
15. Ora riavvia HAProxy servizio per applicare le nuove modifiche.
# systemctl restart haproxy
16. Quindi, assicurati che l'HTTP (porta 80 ) e HTTPS (porta 433 ) i servizi vengono aperti nel firewall per accettare le richieste dei 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
Fase 3:verifica della configurazione di HAProxy e visualizzazione delle statistiche
17. Ora è il momento di testare HAPrxoy impostare. Sul computer desktop locale da cui accedi a tutti i server, aggiungi la seguente riga in /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/
Controllare Configurazione HAProxy
19. Per accedere a HAProxy pagina delle statistiche, utilizza 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).
Pagina di accesso alle statistiche HAProxy
Dopo un accesso riuscito, atterrerai su HAProxy pagina delle statistiche che ti 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.
Rapporto Statistico HAProxy
Fase 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 HAProxy e il client. HAProxy supporta quattro principali HTTPS modalità di configurazione, ma per questa guida utilizzeremo SSL/TLS scarico.
In SSL/TLS modalità di scaricamento, HAProxy decifra il traffico sul lato client e si connette in traffico chiaro ai server back-end.
Inizieremo creando il certificato e 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
Crea SSL per HAProxy
21. Quindi, apri HAProxy file di configurazione (/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
Configura HAProxy Front-end con SSL
Salva il file e chiudilo.
22. Quindi riavvia il servizio HAProxy per applicare le nuove modifiche.
# systemctl restart haproxy.service
23. Quindi, apri un browser web e prova ad accedere al sito ancora una volta. Il browser mostrerà un errore a causa del certificato autofirmato, fai clic su Avanzate per procedere.
Errore di connessione SSL HAProxy
Procedi con Connessione
Accedi al sito tramite HTTPS
È tutto per ora! Ogni applicazione Web ha la propria serie di requisiti, è necessario progettare e configurare il bilanciamento del carico in base alla propria infrastruttura IT e ai requisiti dell'applicazione.
Per ottenere maggiori informazioni su alcune delle opzioni di configurazione utilizzate in questa guida e in generale su come utilizzare HAProxy , vedere la documentazione ufficiale dell'edizione comunitaria di HAProxy o la documentazione della versione aziendale di HAProxy. Puoi inviare qualsiasi domanda o pensiero tramite il modulo di feedback qui sotto.
Condividere è prendersi cura...Condividi su FacebookCondividi su TwitterCondividi su LinkedinCondividi su Reddit