Soluzioni On-Prem: bilanciamento del carico con HAProxy

Di recente, in un progetto in cui sono coinvolto, era necessario bilanciare il carico dei carichi di lavoro. Prendi cloud pubblico, Google, AWS, Azure ecc., Impostare un bilanciamento del carico è abbastanza semplice. È solo questione di un paio di clic nella console. Questo non è il caso quando si sta andando sul posto. Dovresti essere in grado di configurare un bilanciamento del carico da solo. In questo tutorial, ti guiderò attraverso la configurazione di HAProxy per iniziare con il bilanciamento del carico.

Impostazione dei server Web

Innanzitutto, configuriamo un paio di macchine virtuali con server Web Apache. Suppongo che l’immagine di base sia Ubuntu 18.04 LTS per il resto di questa guida.

In entrambe le VM configuriamo rapidamente Apache eseguendo i seguenti comandi.

  $ sudo apt-get update 
$ sudo apt-get install apache2 -y

Ora cambiamo la pagina di benvenuto predefinita di Apache per riflettere il nome del server.
Nella VM 1

  $ echo '   

Hello World from Machine 1 !

' | sudo tee /var/www/html/index.html

In VM 2

  $ echo '   

Hello World from Machine 2 !

' | sudo tee /var/www/html/index.html

Configurare un Bastion Host

Va bene. Ora impostiamo un’altra VM con Ubuntu come immagine di base. Fai un ricciolo sugli indirizzi IP interni di VM1 e VM2 e controlla se ottieni la risposta ciao mondo che abbiamo impostato nel passaggio precedente.

Installa e configura HAProxy

Ora installiamo HAProxy nel nostro host bastion. Per fare ciò, immettere quanto segue nella riga di comando.

  $ sudo apt-get -y installa haproxy 

Questo dovrebbe essere installato in un paio di minuti.

Ora, devi modificare la configurazione haproxy che si trova in /etc/haproxy/haproxy.cfg

  $ sudo vi /etc/haproxy/haproxy.cfg 

Questo visualizzerà un file di configurazione come segue.

  globale 
log / dev / log local0
log / dev / log local1 avviso
chroot / var / lib / haproxy
stats socket /run/haproxy/admin.sock mode 660 livello admin
timeout delle statistiche 30s
utente haproxy
haproxy di gruppo
demone
  # Posizioni materiali SSL predefinite 
ca-base / etc / ssl / certs
crt-base / etc / ssl / private
  # Cifre predefinite da utilizzare su socket di ascolto abilitati per SSL. 
# Per ulteriori informazioni, consultare le cifre (1SSL). Questo elenco proviene da:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH + AESGCM: DH + AESGCM: ECDH + AES256: DH + AES256: ECDH + AES128: DH + AES: ECDH + 3DES: DH + 3DES: RSA + AESGCM: RSA + AES: RSA + 3DES :! aNULL:! MD5: DSS
ssl-default-bind-options no-sslv3
  default 
registro globale
modalità http
opzione httplog
opzione non scontata
timeout connect 5000
client di timeout 50000
server di timeout 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

Nella parte inferiore del file, inseriamo le nostre configurazioni di bilanciamento del carico.

frontend incoming_requsts 
bind *:80
option forwardfor
default_backend webservers

Lo snippet sopra riportato dice al haproxy di associare tutte le richieste in arrivo collegate alla porta 80 su qualsiasi intervallo ip e inoltrarle a un servizio back-end chiamato web server, che definiremo di seguito.

 backend webservers 
balance roundrobin
server webserver1 Your-Webserver1-IP :80 check
server webserver2 Your-Webserver2-IP :80 check
option httpchk

Qui è necessario sostituire il testo in grassetto con gli indirizzi IP pertinenti dei server Web. Nota qui che l’opzione di bilanciamento del carico che abbiamo dato è round robin. Round robin seleziona i server a turno. Questo è l’algoritmo predefinito. Puoi saperne di più su altre opzioni da qui.

Ora salviamo il file di configurazione e verificiamo se le configurazioni sono corrette eseguendo il comando seguente.

  $ haproxy -f /etc/haproxy/haproxy.cfg -c 

Tutto a posto! Se supera la verifica, puoi procedere e applicare la configurazione riavviando il servizio haproxy.

  $ sudo service haproxy restart 

Ora se arricciate l’indirizzo IP del vostro host bastion dal vostro computer locale, dovreste essere in grado di vedere la risposta alternata da VM 1 e VM 2.

Ecco qua! Questo è stato un tutorial piuttosto semplice e fammi sapere se hai domande su questo.

Altre soluzioni

HAProxy non è l’unico bambino in città. Se ritieni che HAProxy potrebbe essere troppo complesso per le tue esigenze, le seguenti soluzioni potrebbero adattarsi meglio:

  • Linux Virtual Server (LVS) – Un semplice e veloce bilanciamento del carico di livello 4 incluso in molte distribuzioni Linux
  • Nginx: un server Web veloce e affidabile che può essere utilizzato anche per scopi proxy e di bilanciamento del carico. Nginx viene spesso utilizzato insieme a HAProxy per le sue capacità di memorizzazione nella cache e compressione

Chiedere supporto.
Saluti!