Scritto in C da Willy Tarreau, HAProxy, noto anche come High Availability Proxy, è un server proxy e bilanciatore di carico HTTP veloce e leggero. Ha un basso utilizzo della CPU ed è causato da un ridotto footprint di memoria. Il sistema di bilanciamento del carico viene utilizzato da siti Web popolari come StackOverflow, Twitter, Github e Tumblr per citarne solo alcuni.
In questa guida, ti mostreremo come configurare HAProxy come sistema di bilanciamento del carico per il server Web Nginx su CentOS 7. Il sistema di bilanciamento del carico sarà posizionato di fronte a 2 server Web Nginx e distribuirà equamente le richieste HTTP ai server.
Algoritmo di bilanciamento HAProxy
Questo è l'algoritmo utilizzato dal sistema di bilanciamento del carico per la selezione dei server Web durante la distribuzione dei carichi di lavoro.
1. Round Robin
Questo è il più semplice degli algoritmi. Fondamentalmente, ogni nuova connessione sarà gestita dal server web successivo. Ad esempio, se hai 4 server back-end, ognuno di essi gestirà le richieste in successione. Quando viene raggiunto l'ultimo server web dell'elenco, il sistema di bilanciamento del carico riparte dall'alto con il primo server web.
2. Lastconn
Qui una nuova richiesta verrà gestita dal server con il minor numero di connessioni. Questo è utile quando il carico e i tempi delle richieste differiscono per grandi variazioni.
Per iniziare
Per iniziare, esegui un elenco di controllo pre-volo e assicurati di avere quanto segue.
Nome host | Indirizzo IP del server |
---|---|
bilanciatore di carico | 173.82.168.96 |
server web-1 | 173.82.2.236 |
server web-2 | 173.82.94.57 |
Di seguito è riportata una rappresentazione grafica della configurazione.
Fase 1:configura il file /etc/hosts nel sistema di bilanciamento del carico
Accedi al sistema di bilanciamento del carico utilizzando SSH e aggiungi gli indirizzi IP e i nomi host dei server Web Nginx come mostrato.
vim /etc/hosts
173.82.2.236 web-server-1
173.82.94.57 web-server-2
Salva ed esci dall'editor di testo vim.
Quindi, accedi a ciascuno dei server Web (web-server-1 e web-server-2) e modifica il /etc/hosts
file per puntare al sistema di bilanciamento del carico.
173.82.168.96 load-balancer
Salva ed esci dall'editor di testo.
Fase 2:installa e configura HAProxy sul server di bilanciamento del carico
Il repository HAProxy è prontamente disponibile nel repository CentOS. Per installare e configurare HAProxy, prima accedi e aggiorna i repository di sistema.
yum update -y
Quindi, installa HAProxy usando il comando:
yum -y install haproxy
Risultato campione
Una volta che l'installazione è riuscita e completata, vai alla directory haproxy.
cd /etc/haproxy
Eseguire il backup di haproxy.cfg
rinominandolo in haproxy.cfg.bak
mv haproxy.cfg haproxy.cfg.bak
Quindi, crea un nuovo file di configurazione HAproxy.
vim haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth Password123: Password123 #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server web-server-1 173.82.2.236:80 check #Nginx1
server web-server-2 173.82.94.57:80 check #Nginx2
Prendi nota dei server web che sono stati specificati nelle ultime 2 righe come mostrato nell'output.
Salva ed esci dall'editor di testo.
Successivamente, configureremo il rsyslog demone per registrare le statistiche HAProxy.
Modifica il rsyslog.conf
per consentire alla porta UDP 514 di essere utilizzata da rsyslog.
vim /etc/rsyslog.conf
Per consentire la connessione UDP tramite la porta 154, decommenta le seguenti righe.
$ModLoad imudp
$UDPServerRun 514
Salva ed esci dall'editor di testo.
Quindi, crea un nuovo file di configurazione HAProxy per syslog.
vim /etc/rsyslog.d/haproxy.conf
Incolla la seguente configurazione
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
Salva ed esci dall'editor di testo.
Procedi e riavvia rsyslog.
systemctl restart rsyslog
Quindi, avvia e abilita Haproxy per l'avvio all'avvio.
systemctl start haproxy
systemctl enable haproxy
Per confermare che HaProxy sia attivo e funzionante, eseguire:
systemctl status haproxy
Nel passaggio successivo, installeremo Nginx sui nostri server web.
Fase 3:installazione e configurazione di Nginx
L'unico passaggio cruciale rimasto è l'installazione di Nginx su ciascuno dei nostri server web.
Ma prima, installa il repository EPEL come mostrato
yum install epel-release
Quindi, installa Nginx
yum install nginx -y
Risultato di esempio
Con Nginx installato su entrambi i server, modificheremo index.html
file in ciascuno dei server Web Nginx al fine di creare una distinzione tra ciascun server durante la simulazione con il sistema di bilanciamento del carico HAproxy.
Passa alla directory html come mostrato:
cd /usr/share/nginx/html/
Eseguire il backup del file index.html
mv index.html index.html.bak
Quindi, crea un nuovo file index.html e incolla del contenuto di esempio.
Per Web Server 1
echo "web-server-1. Hey ! This is your first web server" > index.html
Per Web Server 2
echo "web-server-2. Hey ! This is your second web server" > index.html
Quindi, avvia Nginx in entrambi i server Web e conferma se il servizio è in esecuzione
systemctl start nginx
systemctl status nginx
Test del bilanciamento del carico
Per verificare che tutto sia andato bene, esegui ripetutamente il comando seguente.
curl 173.82.168.96
Il tuo output dovrebbe essere simile a questo.
Come puoi osservare attentamente, ad ogni successiva esecuzione del comando curl, l'output si alterna tra il primo e il secondo contenuto del server web Perfect!
Ora, proviamo a testare utilizzando il browser web.
https://load-balancer-IP-address
Questo visualizzerà il contenuto su uno dei server web, in questo caso, web-server-2.
Ora, prova ad aggiornare una o due volte e l'output punterà all'altro server web, in questo caso, web-server-1.
Stupendo! Ciò conferma che il nostro sistema di bilanciamento del carico è in grado di distribuire equamente le richieste HTTP tra i nostri server web.
PER raccogliere più statistiche del browser del sistema di bilanciamento del carico il seguente URL
https://load-balancer-IP:8080/stats
Usa la Password123 come nome utente e password come abbiamo definito in haproxy.cfg
file di configurazione.
Questo riassume questo tutorial su come configurare il bilanciamento del carico HAProxy per Nginx su CentOS 7. Sentiti libero di provarlo e condividi questa guida sui tuoi social network. Come sempre, il tuo feedback sarà apprezzato.