Tutorial per principianti di HAProxy

Tutorial Per Principianti Di Haproxy



Man mano che la tua applicazione cresce, emerge la necessità di aggiungere più server per gestire più traffico. Maggiore è il traffico ricevuto dalla tua applicazione, maggiori sono le possibilità di affrontare tempi di inattività dovuti al sovraccarico del server. Tuttavia, esistono strumenti come HAProxy che ti consentono di definire come viene gestito il traffico per bilanciare il carico sul tuo server. L'idea è garantire che nessun server venga sovraccaricato. High Availability Proxy è un software open source progettato per offrire un bilanciamento del carico affidabile fungendo allo stesso tempo da proxy inverso per le applicazioni TCP/HTTP.

HAProxy funziona per ridurre il sovraccarico di qualsiasi server e raggiunge questo obiettivo distribuendo il traffico per garantire che nessun server venga sovraccaricato, ma che altri server siano disponibili. Una piattaforma come Instagram ha un traffico enorme a causa delle richieste inviate al secondo, da qui la necessità di utilizzare HAProxy per definire frontend, backend e ascoltatori per i server per evitare sovraccarichi.

Perché utilizzare HAProxy

Prima di conoscere l'installazione e la configurazione di HAProxy, dovresti capire perché ne abbiamo bisogno, grazie alle funzionalità che offre. Di seguito sono riportate le funzionalità principali di HAProxy:







  1. Bilancio del carico - Con HAProxy puoi distribuire comodamente il traffico su diversi server per evitare di sovraccaricare un singolo server. In questo modo, la tua applicazione non dovrà affrontare problemi di inattività e otterrai reattività, affidabilità e disponibilità più rapide.
  2. Registrazione e monitoraggio – Riceverai registri di monitoraggio dettagliati per i tuoi server per aiutarti nella risoluzione dei problemi. Inoltre, HAProxy dispone di una pagina delle statistiche in cui puoi ottenere analisi delle prestazioni in tempo reale per il tuo bilanciatore del carico.
  3. Controlli sanitari – Anche i tuoi server richiedono un controllo sanitario per determinarne lo stato. HAProxy esegue frequentemente controlli di integrità per conoscere lo stato del tuo server e migliorarne l'affidabilità. Se viene rilevato un server non integro, reindirizza il traffico su un altro server.
  4. Proxy inverso – Un modo per aumentare la sicurezza è nascondere la struttura interna. Fortunatamente, HAProxy ti consente di ricevere il traffico dai client e instradarlo ai server appropriati. In questo modo, la tua struttura interna è nascosta agli occhi dell’hacker.
  5. ACL (elenchi di controllo degli accessi) – Con HAProxy è possibile definire come dovrebbe avvenire l'instradamento del traffico utilizzando vari criteri quali percorsi, intestazioni e indirizzi IP. Pertanto, definire una logica di instradamento personalizzata per il tuo traffico diventa più semplice.
  6. Terminazione SSL – Per impostazione predefinita, SSL/TLS viene scaricato dai server backend, causando una riduzione delle prestazioni. Tuttavia, con HAProxy, la terminazione SSL/TLS avviene nel sistema di bilanciamento del carico, scaricando l'attività sui server backend.

Installazione di HAProxy

Finora abbiamo definito cos'è HAProxy e discusso le funzionalità che offre per aiutarti a capire perché ne hai bisogno per la tua applicazione. Il prossimo passo è capire come iniziare installandolo sul tuo sistema.



Se utilizzi i sistemi Ubuntu o Debian, HAProxy può essere installato dal gestore pacchetti APT. Esegui il seguente comando:



$ sudo apt aggiornamento
$ sudo apt installa haproxy

Allo stesso modo, se utilizzi sistemi basati su RHEL o CentOS, HAProxy è disponibile dal gestore pacchetti 'yum'. Esegui i seguenti comandi:





$ aggiornamento sudo yum
$ sudo yum installa haproxy

Nel nostro caso, stiamo usando Ubuntu. Pertanto, abbiamo il nostro comando come segue:



Possiamo quindi verificare la sua versione per accertarci che siamo riusciti a installare HAProxy con successo.

$ haproxy --version

Come configurare HAProxy

Con HAProxy installato, ora puoi aprire il suo file di configurazione ( / etc/haproxy/haproxy.cfg) e definisci le impostazioni che desideri utilizzare per il tuo sistema di bilanciamento del carico.

Apri il file di configurazione utilizzando un editor come nano o vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Ottieni un file di configurazione come quello seguente:

Dal file di configurazione, noterai che viene fornito con due sezioni principali:

  1. globale – È la prima sezione del file e i suoi valori non devono essere modificati. Contiene le impostazioni del processo che definiscono il funzionamento di HAProxy. Ad esempio, definisce i dettagli di registrazione e i gruppi o gli utenti che possono eseguire le funzioni HAProxy. Tieni presente che in questo file di configurazione puoi avere solo una sezione globale e i suoi valori dovrebbero rimanere inalterati.
  1. valori predefiniti – Questa sezione contiene i valori predefiniti per i nodi. Ad esempio, in questa sezione è possibile aggiungere i timeout o la modalità operativa per HAProxy. Inoltre, è possibile avere numerose sezioni predefinite nel file di configurazione HAProxy.

Ecco un esempio di una sezione 'Predefinite':

Nell'immagine fornita, la modalità definisce il modo in cui HAProxy gestirà le richieste in entrata. È possibile impostare la modalità su HTTP o TCP. Per quanto riguarda il timeout, specifica quanto tempo deve attendere HAProxy. Ad esempio, la connessione timeout è il tempo di attesa prima che venga stabilita una connessione back-end. Il client di timeout indica il tempo che HAProxy deve attendere affinché un client invii i dati. Il server di timeout è il tempo di attesa affinché il server appropriato invii i dati che verranno inoltrati al client. Il modo in cui definisci i valori predefiniti è molto importante per migliorare il tempo di risposta della tua applicazione.

Ci sono altre tre sezioni che dovresti definire affinché il tuo sistema di bilanciamento del carico funzioni come previsto.

  1. fine frontale - Questa sezione contiene gli indirizzi IP che desideri che i tuoi clienti utilizzino per stabilire la connessione.
  2. backend – Mostra i pool di server che gestiscono le richieste come definito nella sezione frontend.
  3. Ascoltare - Viene utilizzato in successione quando si desidera instradare un gruppo di server specifico. Questa sezione combina le attività del frontend e del backend.

Facciamo un esempio

Per questo esempio, definiamo il frontend per utilizzare il localhost con una porta specifica. Successivamente, lo colleghiamo al backend che esegue localhost e quindi eseguiamo un server Python per verificare se tutto funziona come previsto per il bilanciamento del carico. Segui i passaggi indicati.

Passaggio 1: configurazione della sezione predefinita

Nella sezione 'Default', impostiamo i valori da condividere tra i nodi. Nel nostro caso, impostiamo la modalità su HTTP e impostiamo i timeout per il client e il server. Puoi regolare l'orario in base alle tue esigenze.

Ricordare che tutte queste modifiche si trovano nella configurazione HAProxy situata in '/etc/haproxy/haproxy.cfg'. Una volta configurata la sezione predefinita, definiamo il frontend.

Passaggio 2: configurazione della sezione frontend

Nella sezione frontend definiamo il modo in cui vogliamo che i clienti online accedano all'applicazione o al sito web. Forniamo gli indirizzi IP per l'applicazione. Ma in questo caso lavoriamo con localhost. Pertanto, il nostro indirizzo IP è l'indirizzo di fallback di 127.0.0.1 e vogliamo accettare le connessioni tramite la porta 80.

È necessario aggiungere la parola chiave 'bind' che funge da ascoltatore per l'indirizzo IP sulla porta specificata. L'indirizzo IP e la porta che definisci sono ciò che il sistema di bilanciamento del carico utilizza per accettare le richieste in entrata.

Dopo aver aggiunto le righe precedenti nel file di configurazione, dobbiamo riavviare “haproxy.service” con il seguente comando:

$ sudo systemctl riavvia haproxy

A questo punto possiamo provare ad inviare le richieste al nostro sito utilizzando il comando “curl”. Esegui il comando e aggiungi l'indirizzo IP di destinazione.

$ curl

Dato che dobbiamo ancora definire come sarà il backend del nostro HAProxy, otteniamo un errore 503 come mostrato di seguito. Sebbene il sistema di bilanciamento del carico sia riuscito a ricevere le richieste, nessun server è attualmente disponibile per gestirle, da qui l'errore.

Passaggio 3: configurazione del backend

La sezione backend è dove definiamo i server che gestiranno eventuali richieste in arrivo. Il bilanciatore del carico fa riferimento a questa sezione per sapere come distribuire le richieste in entrata per garantire che nessun server venga sovraccaricato.

L'errore 503 che abbiamo ricevuto in precedenza era dovuto al fatto che non avevamo alcun backend per gestire le richieste. Iniziamo definendo il 'default_backend' per gestire le richieste. Lo definisci nella sezione frontend. Lo abbiamo chiamato “linux_backend” per questo caso.

Successivamente, crea una sezione backend che abbia lo stesso nome di quella definita nella sezione frontend. Dovrai quindi utilizzare la parola chiave “server” seguita dal nome del tuo server e dal suo indirizzo IP. L'immagine seguente mostra che abbiamo definito il server 'linuxhint1' utilizzando IP 127.0.0.1 e porta 8001:

Puoi avere un pool di server backend, ma ne abbiamo definito solo uno per questo caso. Assicurati di salvare il file. Dobbiamo riavviare nuovamente il servizio HAProxy.

Per testare il bilanciatore del carico HAProxy creato, creiamo un server Web utilizzando Python3 per associare le porte backend utilizzando l'indirizzo IP che abbiamo specificato. Eseguiamo il comando come segue:

$ python3 -m http.server 8001 --bind 127.0.0.1

Assicurati di sostituire i valori in modo che corrispondano al tuo indirizzo IP e alla porta che desideri associare. Nota come viene creato il server Web e ascolta eventuali richieste in arrivo.

Su un altro terminale, utilizziamo il comando “curl” per inviare una richiesta al server.

$ curl

A differenza di come in precedenza abbiamo ricevuto l'errore 503 che mostra che nessun server è disponibile per gestire la richiesta, questa volta otteniamo un output che conferma che il nostro sistema di bilanciamento del carico HAProxy funziona.

Se torni al terminale precedente in cui abbiamo creato il server web, vedrai che otteniamo un output di successo 200 che conferma che HAProxy ha ricevuto la richiesta e l'ha gestita inviandola al server definito nella nostra sezione backend.

Ecco come puoi impostare un semplice HAProxy per il tuo sito web o la tua applicazione.

Lavorare con le regole

Prima di concludere questo tutorial per principianti su HAProxy, parliamo rapidamente di come definire le regole per guidare il modo in cui le richieste verranno gestite dal sistema di bilanciamento del carico.

Seguendo gli stessi passaggi di prima, lasciamo intatta la nostra sezione predefinita e definiamo diversi indirizzi IP nella sezione frontend. Leghiamo lo stesso indirizzo IP ma accettiamo connessioni da porte diverse.

Inoltre, abbiamo il nostro “default_backend” e un altro “use_backend” che è un diverso pool di server che utilizzeremo a seconda della porta da cui provengono le richieste. Nella seguente configurazione tutte le richieste tramite la porta 81 vengono gestite dai server nel “Linux2_backend”. Qualsiasi altra richiesta viene gestita dal 'default_backend'.

Creiamo quindi le sezioni di backend come definite nel frontend. Tieni presente che per ciascun backend abbiamo un server diverso che specifichiamo da utilizzare per gestire le richieste.

Riavvia rapidamente il servizio HAProxy.

Creiamo il server web utilizzando Python3 e colleghiamo le richieste sulla porta 8002 che è il server backend alternativo.

Quando inviamo richieste ad esso, specifichiamo la porta come 81 per attivare il bilanciatore del carico per inviare le richieste al server alternativo che non è quello predefinito.

Ricontrollando il nostro server web, possiamo vedere che riesce a ricevere e gestire le richieste e fornisce una risposta 200 (successo).

È così che puoi definire le regole per guidare il modo in cui il tuo sistema di bilanciamento del carico riceverà e gestirà le richieste.

Conclusione

HAProxy è una soluzione ideale per il bilanciamento del carico per le applicazioni TCP/HTTP. Una volta installato, puoi modificare comodamente il file di configurazione per definire le sezioni predefinite, frontend e backend per guidare il funzionamento del tuo bilanciatore del carico. Questo post è una guida per principianti su HAProxy. Si è iniziato definendo HAProxy e le sue caratteristiche. Successivamente, ha approfondito la comprensione di come configurare HAProxy e ha concluso fornendo un esempio su come utilizzare HAProxy come bilanciatore del carico.