GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Bilanciamento del carico del server Web con HAProxy su Ubuntu 14.04

Cos'è HAProxy?

HAProxy (High Availability Proxy) è un sistema di bilanciamento del carico open source in grado di bilanciare il carico di qualsiasi servizio TCP. HAProxy è una soluzione gratuita, molto veloce e affidabile che offre bilanciamento del carico, alta disponibilità e proxy per applicazioni basate su TCP e HTTP. È particolarmente adatto per siti Web ad alto traffico e alimenta molti di quelli più visitati al mondo.

Sin dalla sua esistenza, è diventato il sistema di bilanciamento del carico open source standard de facto. Sebbene non si pubblicizzi da solo, ma è ampiamente utilizzato. Di seguito è riportato un diagramma di base di come appare la configurazione:

Installazione di HAProxy

Sto usando Ubuntu 14.04 e lo installo da:

apt-get install haproxy

Puoi controllare la versione:

haproxy -v


Dobbiamo abilitare HAProxy per essere avviato dallo script init /etc/default/haproxy. Imposta l'opzione ABILITATA su 1 come:

ENABLED=1

Per verificare se questa modifica è stata eseguita correttamente, eseguire lo script init di HAProxy senza alcun parametro. Dovresti vedere quanto segue:

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

HAProxy è ora installato. Creiamo ora una configurazione in cui abbiamo 2(due) istanze del server Web Apache e 1(una) istanza HAProxy. Di seguito sono riportate le informazioni sulla configurazione:

Utilizzeremo tre sistemi, generati virtualmente tramite VirtualBox:

Istanza 1 - Load Balancer

Nome host:haproxy
Sistema operativo:Ubuntu
IP privato:192.168.205.15

Istanza 2 - Server Web 1

Nome host:webser01
OS:Ubuntu con LAMP
IP privato:192.168.205.16

Istanza 2 - Web Server 2

Hostname:webserver02
OS:Ubuntu con LAMP
IP privato:192.168.205.17

Ecco il diagramma di come appare la configurazione:

Ora configuriamo HAProxy.

Configurazione di HAProxy

Eseguire il backup del file originale rinominandolo:

mv /etc/haproxy/haproxy.cfg{,.original}

Creeremo il nostro file haproxy.cfg. Usando il tuo editor di testo preferito crea il file /etc/haproxy/haproxy.cfg come:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Spiegazione:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

La direttiva log menziona un server syslog a cui verranno inviati i messaggi di log.
La direttiva maxconn specifica il numero di connessioni simultanee sul front-end. Il valore predefinito è 2000 e deve essere ottimizzato in base alla configurazione del sistema.
Le direttive utente e gruppo modificano il processo HAProxy nell'utente/gruppo specificato. Questi non dovrebbero essere modificati.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

La sezione precedente ha i valori predefiniti. L'opzione redispatch abilita la ridistribuzione della sessione in caso di errori di connessione. Pertanto, la stabilità della sessione viene ignorata se un'istanza del server Web si interrompe.
La direttiva sui tentativi imposta il numero di tentativi da eseguire su un'istanza del server Web dopo un errore di connessione.
I valori da modificare sono le varie direttive di timeout. L'opzione contimeout specifica il tempo massimo di attesa affinché un tentativo di connessione a un'istanza del server Web abbia esito positivo.
Clitimeout e srvtimeout si applicano quando si prevede che il client o il server riconosca o invii dati durante il processo TCP. HAProxy consiglia di impostare i timeout del client e del server sullo stesso valore.


listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check

Il blocco sopra contiene la configurazione sia per il frontend che per il backend. Stiamo configurando HAProxy per l'ascolto sulla porta 80 per la webfarm, che è solo un nome per identificare un'applicazione.
Le direttive statistiche abilitano la pagina delle statistiche di connessione. Questa pagina può essere visualizzata con l'URL menzionato in stats uri, quindi in questo caso è http://192.168.205.15/haproxy?stats una demo di questa pagina può essere visualizzata qui.
La direttiva balance specifica il bilanciamento del carico algoritmo da utilizzare. Le opzioni dell'algoritmo disponibili sono:

  • Round Robin (round robin),
  • Round Robin statico (static-rr),
  • Least Connections (leastconn),
  • Fonte (fonte),
  • URI (uri) e
  • Parametro URL (url_param).

Le informazioni su ciascun algoritmo possono essere ottenute dalla documentazione ufficiale.

La direttiva server dichiara un server back-end, la sintassi è:

server <server_name> <server_address>[:port] [param*]
    

Il nome che menzioniamo qui apparirà nei registri e negli avvisi. Ci sono altri parametri supportati da questa direttiva e useremo il parametro check in questo articolo. L'opzione di controllo abilita i controlli di integrità sull'istanza del server Web, altrimenti l'istanza del server Web è ?sempre considerata disponibile.

Una volta terminata la configurazione, avviare il servizio HAProxy:

sudo service haproxy start

Test del bilanciamento del carico e del failover

Aggiungeremo il nome del server in entrambi i file index.html predefiniti che si trovano per impostazione predefinita in /var/www/index.html

Sull'istanza 2 - Web Server 1 (webserver01 con IP- 192.168.205.16), aggiungere la riga seguente come:

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

Sull'istanza 3 - Web Server 2 (webserver02 con IP- 192.168.205.17), aggiungere la riga seguente come:

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

Ora apri il browser web sul computer locale e sfoglia l'IP haproxy, ad esempio http://192.168.205.15

Ogni volta che aggiorni la scheda, vedrai che il carico viene distribuito a ciascun server web. Di seguito è riportato lo screenshot del mio browser:

Per la prima volta quando visito http://192.168.205.15 , ottengo:

E per la seconda volta, ovvero quando aggiorno la pagina, ottengo:

Puoi anche controllare le statistiche haproxy visitando http://192.168.205.15/haproxy?stats

C'è di più che puoi fare per questa configurazione. Alcune idee includono:

  • porta offline uno o entrambi i server web per testare cosa succede quando accedi a HAProxy
  • configura HAProxy per servire una pagina di manutenzione personalizzata
  • configurare l'interfaccia web in modo da poter monitorare visivamente le statistiche HAProxy
  • modifica lo scheduler in qualcosa di diverso dal round robin
  • configurare priorità/pesi per server particolari

Questo è tutto!


Ubuntu
  1. Configurazione iniziale del server con Ubuntu 14.04

  2. Come configurare HAProxy su Debian 9 / Ubuntu 16.04 Server

  3. Come installare il server Web Cherokee con PHP5 e MySQL su Ubuntu 11.04

  4. Installa il server web Apache su Ubuntu 12.10

  5. Configurazione del server Web Ubuntu?

Come installare Apache Web Server su Ubuntu 18.04

Come installare Jetty Web Server su Ubuntu 14.04

Come installare il server Web Cherokee su Ubuntu 14.04

Come installare Hiawatha Web Server su Ubuntu 14.04

Come installare Hiawatha Web Server su Ubuntu 16.04

Server Web su Ubuntu 16.04??