HAProxy o High Availability Proxy è un software open source di bilanciamento del carico TCP e HTTP e server proxy. HAProxy è stato scritto da Willy Tarreau in C, supporta SSL, compressioni, keep-alive, formati di log personalizzati e riscrittura dell'intestazione. HAProxy è un server proxy veloce e leggero e un sistema di bilanciamento del carico con un ingombro di memoria ridotto e un basso utilizzo della CPU. È utilizzato da grandi siti come Github, StackOverflow, Reddit, Tumblr, Twitter e altri. È diventato il più popolare sistema di bilanciamento del carico software e server proxy negli ultimi anni.
In questo tutorial, ti guiderò attraverso l'installazione e la configurazione di HAProxy per 3 server, un sistema di bilanciamento del carico e due server Web Nginx. Installeremo HAProxy su un singolo server e quindi installeremo il server web Nginx sugli altri server. HAProxy funge da bilanciamento del carico per i server Web Nginx.
Concetto di base con HAProxy
Livello 4 e Livello 7
HAProxy può essere eseguito in due modalità:modalità TCP Layer 4 e modalità HTTP Layer 7. Nella modalità TCP Layer 4, HAProxy inoltra i pacchetti RAW TCP dal client ai server delle applicazioni. Nella modalità HTTP di livello 7, HAProxy analizza l'intestazione HTTP prima di inoltrarla ai server delle applicazioni. In questo tutorial, useremo Nginx come server web che supporta solo la modalità HTTP Layer 7.
Algoritmo di bilanciamento
Questo è l'algoritmo utilizzato da HAProxy per selezionare il server durante il bilanciamento del carico. Sono disponibili le seguenti modalità:
Roundrobin
Questo è l'algoritmo di bilanciamento più semplice. Per ogni nuova connessione, verrà gestita dal server di backend successivo. Se viene raggiunto l'ultimo server di backend nell'elenco, ricomincerà dall'inizio dell'elenco di backend.
Ultima connessione
La nuova connessione verrà gestita dal server back-end con il minor numero di connessioni. Questo è utile quando il tempo e il carico delle richieste variano molto.
Fonte
Questo è per le sessioni permanenti, l'IP del client verrà sottoposto a hash per determinare il server back-end che ha ricevuto l'ultima richiesta da questo IP. Quindi un IP A sarà sempre gestito da backend1 e un IP B sarà sempre gestito da bankend2 per non interrompere le sessioni
Ci sono altri algoritmi:controlla il sito ufficiale di HAProxy per i dettagli.
Prerequisiti
- 3 CentOS 7
bilanciatore di carico
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
- Privilegi di root su tutti e 3 i server.
Fase 1 - Configura i file /etc/hosts
Accedi al server di bilanciamento del carico e modifica il file /etc/hosts.
ssh [email protected]
sudo su
vi /etc/hosts
Aggiungi i nomi host nginx1 e nginx2:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Salva il file ed esci dall'editor.
Quindi, modifica il file hosts sui server Nginx (nginx1 e nginx2):
ssh [email protected]
ssh [email protected]
Modifica e aggiungi una nuova riga per il sistema di bilanciamento del carico nei file hosts:
vi /etc/host
Aggiungi il nome host del loadbalancer su ogni server nginx:
192.168.1.102 loadbalancer
fallo sui server nginx1 e nginx2.
Fase 2:installazione e configurazione di HAProxy
HAProxy è disponibile nel repository CentOS 7, accedi al server loadbalancer e aggiorna gli elenchi dei pacchetti:
ssh [email protected]
yum -y update
Ora installa HAProxy con questo comando yum:
yum -y install haproxy
Al termine dell'installazione, vai alla directory "/etc/haproxy/" ed esegui il backup del file di configurazione originale:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Quindi, aggiungi un nuovo file di configurazione HAProxy "haproxy.cfg" con l'editor vi:
vi haproxy.cfg
Incolla la configurazione di seguito:
#---------------------------------------------------------------------
# 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 howtoforge:howtoforge #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 roundrobin 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 nginx1 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2
Salva il file di configurazione ed esci.
Quindi, configura rsyslog per HAProxy.
Configurare il demone rsyslog per registrare le statistiche HAProxy. Modifica il file rsyslog.conf per consentire alla porta UDP 514 di essere utilizzata da rsyslog.
vi /etc/rsyslog.conf
Decommenta questa riga per abilitare la connessione UDP:
$ModLoad imudp
$UDPServerRun 514
Se vuoi utilizzare un IP specifico, puoi aggiungere una nuova riga come quella qui sotto:
$UDPServerAddress 127.0.0.1
Salva il file ed esci.
Quindi crea un nuovo file di configurazione haproxy per rsyslog:
cd /etc/rsyslog.d/
vi haproxy.conf
Incolla la configurazione di seguito:
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.
Ora riavvia rsyslog e quindi avvia l'haproxy:
systemctl restart rsyslog
systemctl start haproxy
Aggiungi haproxy per iniziare all'avvio:
systemctl enable haproxy
Fase 3 - Installa e configura Nginx
In questa sezione installeremo Nginx dal repository epel sui server nginx1 e nginx2.
Accedi ai server:
ssh [email protected]
ssh [email protected]
Installa il repository epel con il comando yum di seguito:
yum -y install epel-release
Ora puoi installare Nginx:
yum -y install nginx
Nginx è installato. Vai alla directory web e cambia il file di indice in modo che possiamo vedere quale dei due server ha consegnato il file html:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 server
Quindi, aggiungi Nginx per iniziare all'avvio e quindi avvialo:
systemctl enable nginx
systemctl start nginx
Assicurati di eseguire questo passaggio sul server nginx1 e nginx2.
Fase 4 - Test
Test dal browser accedendo all'IP del loadbalancer:192.168.1.102
Test con il comando curl:
curl 192.168.1.102
Test per accedere al monitoraggio web HAProxy in esecuzione sulla porta 8080 con nome utente e password "howtoforge":
http://192.168.1.102:8080/stats
HAProxy funziona con successo e funge da bilanciatore del carico per i nostri due server web Nginx.
Conclusione
HAProxy o High Availability proxy è un software open source che fornisce alta disponibilità per servizi basati su TCP, funziona come bilanciatore di carico HTTP e server proxy. Il software è scritto in C e supporta SSL, keep-alive e compressione. HAProxy è la scelta giusta per tutti coloro che necessitano di un sistema di bilanciamento del carico e di un server proxy veloce e leggero con un ingombro di memoria ridotto e un utilizzo ridotto della CPU. Haproxy può essere eseguito in modalità Layer 4 TCP e Layer 7 HTTP. Nginx supporta solo la modalità HTTP Layer 7 con HAProxy. Se desideri utilizzare la modalità TCP Layer 4, puoi utilizzare altri server Web come Apache. In CentOS 7, HAProxy è disponibile nel repository predefinito. È facile da installare e configurare.