Installiamo il bilanciatore di carico HAProxy su CentOS

La traduzione dell'articolo è stata preparata in vista dell'inizio del corso «Amministratore Linux. Virtualizzazione e clusterizzazione»

Installiamo il bilanciatore di carico HAProxy su CentOS

Il bilanciamento del carico è una soluzione comune per la scalabilità orizzontale delle applicazioni web su più host, fornendo agli utenti un unico punto di accesso al servizio. HAProxy è uno dei programmi più popolari per il bilanciamento del carico con codice sorgente aperto, che offre anche alta disponibilità e funzionalità di proxy.

HAProxy mira a ottimizzare l'uso delle risorse, massimizzare la capacità di throughput, ridurre i tempi di risposta ed evitare il sovraccarico di ciascuna risorsa in particolare. Può essere installato su molte distribuzioni Linux, come CentOS 8, su cui ci concentreremo in questa guida, così come sui sistemi Debian 8 e Ubuntu 16.

Installiamo il bilanciatore di carico HAProxy su CentOS

HAProxy è particolarmente adatto per siti web con un elevato traffico e viene spesso utilizzato per migliorare l'affidabilità e le prestazioni delle configurazioni dei servizi web con più server. In questa guida sono riportati i passaggi per configurare HAProxy come bilanciatore di carico su un host cloud CentOS 8, che successivamente indirizza il traffico ai vostri server web.

Per ottenere i migliori risultati, è necessario avere almeno due server web e un server per il bilanciamento del carico. I server web devono avere in esecuzione almeno un servizio web di base, come nginx o httpd, per poter testare il bilanciamento del carico tra di essi.

Installazione di HAProxy su CentOS 8

Poiché HAProxy è un'applicazione open source in rapida evoluzione, la distribuzione disponibile nei repository standard di CentOS potrebbe non essere l'ultima versione. Per scoprire la versione attuale, eseguire il seguente comando:

sudo yum info haproxy

HAProxy offre sempre la scelta tra tre versioni stabili: le due versioni supportate più recenti e una terza, più vecchia, che riceve ancora aggiornamenti critici. Puoi sempre verificare l'ultima versione stabile sul sito di HAProxy e decidere con quale versione vuoi lavorare.

In questa guida installeremo l'ultima versione stabile 2.0, che non era disponibile nei repository standard al momento della scrittura della guida. Dovrai installarla dalla fonte originale. Ma prima, assicurati di avere i requisiti necessari per il download e la compilazione del programma.

sudo yum install gcc pcre-devel tar make -y

Scarica il codice sorgente con il comando sottostante. Puoi verificare se esiste una versione più recente disponibile su pagina di download di HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Dopo il completamento del download, estrai i file con il comando seguente:

tar xzvf ~/haproxy.tar.gz -C ~/

Vai alla cartella estratta con i sorgenti:

cd ~/haproxy-2.0.7

Quindi compila il programma per il tuo sistema:

make TARGET=linux-glibc

Infine, installa HAProxy stesso:

sudo make install

Ora HAProxy è installato, ma sono necessarie alcune operazioni aggiuntive per il suo funzionamento. Continuiamo la configurazione del software e dei servizi qui sotto.

Configurazione di HAProxy per il tuo server

Aggiungi ora le seguenti directory e il file statistico per i registri di HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats

Crea un collegamento simbolico per i file binari in modo da poter eseguire i comandi HAProxy come un utente normale:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Se desideri aggiungere il proxy al sistema come servizio, copia il file haproxy.init dagli esempi nella tua directory /etc/init.d. Modifica i permessi del file affinché lo script possa essere eseguito, quindi riavvia il demone systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Devi anche consentire al servizio di riavviarsi automaticamente all'avvio del sistema:

sudo chkconfig haproxy on

Per comodità, si consiglia anche di aggiungere un nuovo utente per eseguire HAProxy:

sudo useradd -r haproxy

Dopo ciò, puoi controllare nuovamente il numero della versione installata con il seguente comando:

haproxy -v
HA-Proxy versione 2.0.7 2019/09/27 - https://haproxy.org/

Nel nostro caso, la versione deve essere 2.0.7, come mostrato nell'esempio di output sopra.

Infine, il firewall in CentOS 8 è piuttosto restrittivo per questo progetto per impostazione predefinita. Usa i seguenti comandi per permettere i servizi necessari e riavviare il firewall:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Configurazione del bilanciatore di carico

Configurare HAProxy è un processo piuttosto semplice. Fondamentalmente, tutto ciò che devi fare è informare HAProxy quali connessioni deve ascoltare e dove deve inoltrarle.

Questo si fa creando un file di configurazione /etc/haproxy/haproxy.cfg con le impostazioni necessarie. Puoi leggere riguardo alle opzioni di configurazione di HAProxy nella pagina della documentazione, se vuoi saperne di più.

Bilanciamento del carico a livello di trasporto (layer 4)

Iniziamo con una configurazione di base. Crea un nuovo file di configurazione, ad esempio, usando vi con il comando seguente:

sudo vi /etc/haproxy/haproxy.cfg

Aggiungi al file le seguenti sezioni. Sostituisci server_name con ciò che deve richiamare i tuoi server nella pagina delle statistiche, e private_ip — indirizzi IP privati dei server a cui si desidera reindirizzare il traffico web. Puoi controllare gli indirizzi IP privati nel pannello di controllo UpCloud e nella scheda Rete privata nel menu Network log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Questo definisce un bilanciatore di carico a livello di trasporto (layer 4) con nome esterno http_front, che ascolta sulla porta 80 e poi reindirizza il traffico al backend predefinito chiamato http_back. Ulteriori statistiche /haproxy?stats collegano la pagina delle statistiche all'indirizzo indicato.

Diverse strategie di bilanciamento del carico.

L'indicazione dei server nella sezione backend consente a HAProxy di utilizzare questi server per il bilanciamento del carico secondo l'algoritmo round-robin, quando possibile.

Gli algoritmi di bilanciamento vengono utilizzati per determinare quale server nel backend gestirà ogni connessione. Ecco alcune delle opzioni utili:

  • Roundrobin: ogni server viene utilizzato a turno in base al proprio peso. Questo è l'algoritmo più fluido e giusto, in cui il tempo di elaborazione sui server rimane uniformemente distribuito. Questo algoritmo è dinamico e consente di regolare il peso del server in tempo reale.
  • Leastconn: viene selezionato il server con il minor numero di connessioni. Si esegue un ciclo tra i server con carico uguale. Questo algoritmo è consigliato per sessioni lunghe, come LDAP, SQL, TSE, ecc., ma non è molto adatto per sessioni brevi, come HTTP.
  • First: il primo server con slot disponibili per la connessione riceve la connessione. I server vengono selezionati dall'identificativo numerico più basso al più alto, che per impostazione predefinita corrisponde alla posizione del server nel cluster. Una volta che un server raggiunge il valore maxconn, viene utilizzato il server successivo.
  • Fonte: L'indirizzo IP di origine è hashato e distribuito sulla base del peso totale dei server attivi, per determinare qual è il server che riceverà la richiesta. In questo modo, lo stesso indirizzo IP del cliente sarà sempre assegnato allo stesso server, mentre i server rimangono invariati.

Impostazione del bilanciamento del carico a livello applicativo (layer 7)

Un'altra opzione disponibile è configurare il bilanciatore di carico per funzionare a livello applicativo (layer 7), il che è utile quando parti della vostra applicazione web si trovano su host diversi. Questo può essere realizzato regolando la trasmissione delle connessioni, ad esempio, per URL.

Apri il file di configurazione di HAProxy utilizzando un editor di testo:

sudo vi /etc/haproxy/haproxy.cfg

Quindi configura i segmenti frontend e backend secondo l'esempio seguente:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

Il frontend dichiara una regola ACL chiamata url_blog, che si applica a tutte le connessioni con percorsi che iniziano con /blog. Use_backend definisce che le connessioni che soddisfano la condizione url_blog devono essere gestite dal backend chiamato blog_back, mentre tutte le altre richieste vengono elaborate dal backend predefinito.

Dal lato backend, la configurazione stabilisce due gruppi di server: http_back, come prima, e un nuovo gruppo chiamato blog_back, che gestisce le connessioni a example.com/blog.

Dopo aver modificato le impostazioni, salva il file e riavvia HAProxy utilizzando il seguente comando:

sudo systemctl restart haproxy

Se durante l'avvio hai ricevuto avvisi o messaggi di errore, controlla la configurazione per verificarne la correttezza e assicurati di aver creato tutti i file e le cartelle necessari, quindi riprova a riavviare.

Test della configurazione

Quando HAProxy è configurato e in esecuzione, apri l'indirizzo IP pubblico del server del bilanciatore di carico nel browser e verifica se ti sei connesso correttamente al backend. Il parametro stats uri nella configurazione crea una pagina di statistiche all'indirizzo specificato.

http://load_balancer_public_ip/haproxy?stats

Quando carichi la pagina delle statistiche, se tutti i tuoi server vengono visualizzati in verde, significa che la configurazione è avvenuta con successo!

Installiamo il bilanciatore di carico HAProxy su CentOS

La pagina delle statistiche contiene alcune informazioni utili per monitorare i tuoi servizi di hosting web, inclusi tempo di attività / inattività e numero di sessioni. Se un server è contrassegnato in rosso, assicurati che sia acceso e che tu possa pingarlo dalla macchina di bilanciamento del carico.

Se il tuo bilanciatore di carico non risponde, assicurati che le connessioni HTTP non siano bloccate dal firewall. Verifica anche che HAProxy sia in funzione usando il comando seguente:

sudo systemctl status haproxy

Protezione della pagina delle statistiche con password

Tuttavia, se la pagina delle statistiche è semplicemente esposta nel frontend, sarà accessibile al pubblico, il che potrebbe non essere una buona idea. Invece, puoi assegnarle un numero di porta specifico aggiungendo l'esempio seguente alla fine del tuo file haproxy.cfg. Sostituisci username e password con qualcosa di sicuro:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Dopo aver aggiunto un nuovo gruppo di ascoltatori, rimuovere il vecchio link all'URI stats dal frontend del gruppo. Quando hai finito, salva il file e riavvia HAProxy.

sudo systemctl restart haproxy

Poi riapri il bilanciatore di carico con il nuovo numero di porta e accedi con il nome utente e la password che hai specificato nel file di configurazione.

http://load_balancer_public_ip:8181

Assicurati che tutti i tuoi server siano ancora mostrati in verde, quindi apri solo l'IP del bilanciatore di carico senza alcun numero di porta nel tuo browser.

http://load_balancer_public_ip/

Se i tuoi server interni hanno almeno una certa varietà di pagine di destinazione, noterai che ogni volta che ricarichi la pagina ricevi una risposta da un host diverso. Puoi provare diversi algoritmi di bilanciamento nella sezione di configurazione o consultare la documentazione completa.

Conclusione: bilanciatore di carico HAProxy

Congratulazioni per la configurazione riuscita del bilanciatore di carico HAProxy! Anche con una configurazione di base del bilanciamento del carico, puoi migliorare notevolmente le prestazioni e la disponibilità della tua web app. Questa guida è solo un'introduzione al bilanciamento del carico con HAProxy, che è capace di molto di più rispetto a quanto possa essere descritto in una breve istruzione di configurazione. Ti consigliamo di sperimentare diverse configurazioni utilizzando la documentazione estesa, disponibile per HAProxy, e poi procedere alla pianificazione del bilanciamento del carico per il tuo ambiente di produzione.

Utilizzando più host per proteggere il tuo servizio web con capacità in riserva, il bilanciatore di carico stesso può comunque rappresentare un punto di failure. Puoi aumentare ulteriormente la alta disponibilità configurando un IP fluttuante tra diversi bilanciatore di carico. Puoi saperne di più a riguardo nel nostro articolo sugli IP fluttuanti su UpCloud.

Ulteriori informazioni sul corso «Amministratore Linux. Virtualizzazione e clusterizzazione»***

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster