HAProxy, che sta per High Availability Proxy, è un software open source TCP/HTTP Load Balancer (bilanciatore di carico), ovvero è un software che permette di distribuire connessioni in ingresso (frontend) verso uno o più server (backend). In questo modo è possibile migliorare sia la qualità del servizio offerto, sia l’affidabilità dello stesso.
Nell’articolo Docker Swarm e MicroCeph abbiamo configurato un cluster swarm composto da tre nodi, ognuno dei quali serve una semplice pagina web ospitata su uno storage CephFS. Grazie a HAProxy, gli utenti accederanno alla pagina web tramite il proxy, che si occupa di instradare le connessioni verso uno dei tre server, garantendo così una distribuzione equilibrata del traffico e ottimizzando le prestazioni complessive del sistema.
Regole di firewall
Per una gestione piú semplice, da Datacenter > Firewall > Security Group abilitiamo solo le seguenti regole:
Dalla nostra LAN, potremo accedere solamente al Proxy sulle porte 80 e 443 e questo si occuperà di distribuire il traffico tra i vari nodi. Inoltre, tutto il traffico UDP e TCP tra le VM é consentito.
Installazione
Ora, creiamo una VM con Debian. Nel nostro caso, il proxy avrá l’indirizzo IP 10.10.1.5, mentre i tre nodi, rispettivamente 10.10.1.2, il master, 10.10.1.3, il nodo 1, e 10.10.1.4 il nodo 2.
HAProxy si installa molto semplicemente col comando apt install haproxy.
A questo punto possiamo fare una copia di backup del file di configurazione (utile nel caso avessimo problemi):
|
|
Configurazione
La configurazione di seguito proposta bilancia le connessioni in ingresso sul loadbalance verso tre server web.
|
|
La direttiva bind 10.10.1.5:80 indica che HAProxy ascolta solo sull’interfaccia di rete con l’indirizzo IP 10.10.1.5 sulla porta 80, tipicamente utilizzata per traffico HTTP, inoltrando tutte le richieste al backend denominato nodes_backend.
mode http imposta la modalità HTTP per il frontend, permettendo a HAProxy di comprendere e manipolare le richieste e le risposte HTTP. option httpclose garantisce che le connessioni HTTP vengano chiuse correttamente al termine della risposta.
HAProxy riceve le richieste HTTP sulla porta 80 e le distribuisce in modo bilanciato, attraverso l’algoritmo roundrobin, verso i tre server configurati, monitorandone lo stato tramite richieste GET per garantire che solo i nodi disponibili ricevano traffico.
Avviare infine il servizio col comando systemctl enable --now haproxy.
Avvio del cluster swarm
Con riferimento all’articolo precedente per maggiori dettagli, dal nodo master, assicuriamoci che lo storage CephFS sia correttamente montato e avviamo lo swarm:
|
|
Collegandosi all’indirizzo 10.10.1.5 tramite un qualsiasi browser, la richiesta verrà instradata da HAProxy a uno dei tre nodi. Questo approccio garantisce che, in caso di malfunzionamento di uno dei nodi, il sito rimanga comunque accessibile.