GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come configurare HAProxy in Ubuntu 16.04

HAProxy è uno strumento open source di bilanciamento del carico e servizi proxy ad alta disponibilità per applicazioni di rete basate su TCP e HTTP. È facile da usare, adatto per siti Web ad alto volume e la sua perfetta integrazione nelle architetture esistenti. Offre connessioni trasparenti, offload del server, applicazione delle politiche, limitazione delle connessioni oltre alla sua funzione principale di servizio proxy. In questo articolo spieghiamo come configurare haproxy in Ubuntu 16.04.

1. Configura rete

Aggiungeremo tre server Web in esecuzione con Apache2 e un server HAPROXY che eseguirà il proxy di tutte le richieste/risposte dei tre servizi Web nella nostra rete.

Di seguito sono elencati i dettagli del server Web nella nostra rete.

Server 1:    site1.local     10.0.1.116
Server 2:    site2.local     10.0.1.117
Server 3:    site3.local     10.0.1.119

Server HAProxy:

load-balancer.local      10.0.1.118

Allegheremo anche un IP pubblico a load-balancer.local in modo da accedervi da dominio pubblico (opzionale). Se non desideri accedervi dal dominio pubblico, puoi saltare l'allegato dell'IP pubblico supponendo che accederai al server proxy all'interno della tua rete.

2. Configura nome host

Dal momento che accederemo al sistema di bilanciamento del carico e al server Web tramite il loro nome (non tramite IPADDRESS), imposteremo il nome host di tre server Web e un server proxy. Imposteremo il nome host di tre server Web e server proxy rispettivamente come site1.local, site2.local, site3.local e load-balancer.local.

Imposteremo il nome host di 10.0.1.116 come site1.local in /etc/hosts e /etc/hostname

root@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local

root@site1:~# vi /etc/hostname
site1.local

Riavvia la rete

root@site1:~#  service networking restart

Installa Apache e abilitalo.

root@site1:~# apt-get install apache2

root@site1:~# service apache2 enable

root@site1:~# service apache2 start

Crea un file di indice per site1.local

root@site1:~# vi /var/www/html/index.html

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Aggiungi la regola del firewall per http

# ufw allow 80/tcp
# ufw reload

Ora controlla se puoi accedere al sito1

root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html

O

root@site1:~#  curl  site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Ripeti il ​​passaggio 2 per site2 ( 10.0.1.117 ) e site3 ( 10.0.1.119 ).

Nel server proxy aggiungi tutte e tre le voci dei server Web (IPADDRESS HOSTNAME) oltre al proprio nome host come load-balancer.local

root@load-balancer:~# vi  /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local

Imposta il nome host del server proxy

root@load-balancer:~# vi /etc/hostname
load-balancer.local

3. Installa HAProxy

Prima di installarlo aggiorna Ubuntu. Esegui il comando seguente come root o usando sudo per aggiornare Ubuntu.

root@load-balancer:~# apt-get update

Ora aggiorna i pacchetti sul sistema.

root@load-balancer:~# apt-get upgrade

Installalo eseguendo il seguente comando nel terminale.

root@load-balancer:~# apt-get install haproxy

Per abilitare il servizio come demone, modificare /etc/defaults/haproxy e aggiungere la riga seguente.
ABILITATO=1

root@load-balancer:~# vi /etc/defaults/haproxy

ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"

Avvia il servizio

root@load-balancer:~# service haproxy start

4. Configura HAProxy

Il file di configurazione si trova in /etc/haproxy/haproxy.cfg e ha due parti globali e proxy, la sezione Global imposta parametri a livello di processo e la sezione proxy è composta dalle sezioni default, listen, front-end e back-end.

Modifica il file di configurazione con l'editor di testo vi

root@load-balancer:~# vi /etc/haproxy/haproxy.cfg

Il file di configurazione predefinito sarà simile al seguente. Mantieni la sezione globale e predefinita così com'è.

Sezione globale

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH
+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

Sezione predefinita

defaults
log     global
mode    http
option  httplog
option  dontlognull
timeout connect 5000
timeout client  50000
timeout server  50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

Aggiunta di ascoltatore:

Una sezione "front end" descrive un insieme di socket in ascolto che accettano connessioni client. Il front-end definisce come le richieste devono essere gestite e inviate al server back-end:

frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers

Aggiunta di server Web back-end:

Una sezione "back-end" descrive un insieme di server a cui si connetterà il proxy per inoltrare le connessioni in entrata. Come indicato sopra, il bilanciamento del carico di configurazione è ora in ascolto sulla porta 80. Ora definisci i server Web back-end a cui invierà la richiesta.

backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local  10.0.1.116:80
server site2.local  10.0.1.117:80
server site3.local  10.0.1.119:80

Puoi aggiungere il parametro "check" alla fine delle tre righe sopra per controllare il parametro di salute dei tuoi server web.

Puoi utilizzare un altro algoritmo di bilanciamento a seconda delle tue esigenze.

Leastconn
Seleziona il server con il minor numero di connessioni:è consigliato per sessioni più lunghe. Anche i server nello stesso backend vengono ruotati in modo round robin.

Fonte
Questo seleziona quale server utilizzare in base a un hash dell'IP di origine, ovvero l'indirizzo IP dell'utente. Questo è un metodo per garantire che un utente si connetta allo stesso server.

Abilita statistiche (facoltativo)

Ora se vuoi puoi abilitare le statistiche aggiungendo il seguito nel file di configurazione.

listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats

5. Riavvia HAProxy

Poiché hai eseguito tutte le configurazioni necessarie per il server proxy, verifica il file di configurazione prima di riavviare il servizio utilizzando il seguente comando.

root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg

Se il comando precedente ha restituito l'output come "il file di configurazione è valido", riavviare il servizio HAProxy

root@load-balancer:~# service haproxy restart

Ora controlla lo stato del server HAProxy.

root@load-balancer:~#  service haproxy status

6. Prova HAProxy

Prima di eseguire il test, assicurati di poter eseguire il ping del server web ( site1.local, site2.local, site3.local) da load-balancer.local

root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms

root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms

root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms

Testa HAPROXY utilizzando CURL

Per eseguire il test, esegui il seguente script dal terminale , scoprirai che il sistema di bilanciamento del carico sta inviando una richiesta a tre server Web in un metodo round robin.

root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

...............................

...............................

...............................

Test nel browser:

Punta il tuo browser su http://load-balancer.local o http://Server-Public-IP, riceverai una risposta da tre server Web in modo round robin confermando che funziona secondo le nostre aspettative. Ad ogni aggiornamento, il server proxy invia le richieste al server Web back-end una per una.

Puoi anche visitare l'URL delle statistiche che è configurato nell'ultima sezione del file di configurazione per confermare che le porte sono aperte al traffico. Basta passare a IP pubblico o http://load-balancer.local sulla porta 9000.

Ad esempio, vai a http://load-balancer.local:9000/stats

È inoltre possibile monitorare lo stato del server dal terminale utilizzando HATOP. HATOP è uno strumento di terze parti che estrae le statistiche da un file socket creato da Load Balancer. Installa HATOP eseguendo il seguente comando dal terminale.

root@load-balancer:~# apt-get install hatop

Normalmente quando si esegue HATOP, è necessario utilizzare il parametro -s con il comando sudo hatop -s /var/run/haproxy.sock. Per evitare di dover inserire il parametro -s quando chiami HATOP, puoi inserire la seguente riga nel tuo file ~/.bashrc:

export unix-socket=/var/run/haproxy.sock

7. Registrazione di HAProxy

Modifica /etc/rsyslog.d/haproxy.conf e aggiungi le seguenti righe.

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Riavvia rsyslog

root@load-balancer:~# service rsyslog restart

Ora controlla i log usando il seguente comando

root@load-balancer:~# tail -f /var/log/haproxy*.log

Aggiungi anche la riga "debug" nella sezione globale del file di configurazione per la registrazione dettagliata.

Conclusione

Con HAProxy, puoi aumentare le prestazioni e la disponibilità della tua applicazione web. Questo tutorial è solo un'introduzione al bilanciamento del carico, sebbene sia in grado di fare molto di più di quanto descritto in questo tutorial. Puoi migliorare l'elevata disponibilità configurando IP mobile tra più sistemi di bilanciamento del carico per proteggere dai guasti in un unico sistema di bilanciamento del carico.


Ubuntu
  1. Come configurare il server Rsyslog su Ubuntu 18.04 LTS

  2. Come configurare MariaDB Galera Cluster su Ubuntu 20.04

  3. Come configurare UFW Firewall su Ubuntu 18.04

  4. Come configurare Elasticsearch su Ubuntu 18.04 e 16.04 LTS

  5. Imposta il server Rsyslog su Ubuntu 20.04 - Come farlo?

Come configurare Git Server su Ubuntu 20.04

Come configurare il server Rsyslog su Ubuntu

Come configurare il server DHCP su Ubuntu

Come impostare il legame di rete in Ubuntu 20.04

Come configurare HAProxy su CentOS 8

Come configurare UFW Firewall su Ubuntu 20.04