Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Configurazione del sistema di bilanciamento del carico di alta disponibilità (con Failover e supporto di sessione) con diffusione/HAProxy/Wackamole su Debian Etch

Questo articolo spiega come impostare un bilanciamento del carico di due nodi in una configurazione attivo/passivo con HAProxy,Wackamolee diffondere su Debian Etch. Il bilanciamento del carico si trova tra l’utente e due (o più) backend Apache web server che contengono lo stesso contenuto. Non solo bilanciamento del carico distribuisce le richieste per i due server di backend Apache, inoltre, controlla l’integrità dei server back-end. Se uno di loro è giù, tutte le richieste di essere ridiretti automaticamente al server back-end rimanenti. In aggiunta a ciò, i nodi di bilanciamento del due carico controllano reciprocamente utilizzando Wackamole e diffusione, e se il padrone non riesce, lo schiavo diventa il padrone, che significa che gli utenti non noterà alcuna interruzione del servizio. HAProxy è compatibile con sessione, il che significa che è possibile utilizzarlo con qualsiasi applicazione web che fa uso di sessioni (ad esempio forum, shopping cart, ecc.).

Dal sito web HAProxy: “HAProxy è una soluzione gratuita, molto veloce e affidabile che offre alta disponibilità, bilanciamento del carico e l’inoltro per applicazioni basate su HTTP e TCP. È particolarmente adatto per i siti web strisciando sotto carichi molto alti mentre che necessitano di persistenza o elaborazione Layer7. Supporto di decine di migliaia di connessioni è chiaramente realistico con l’hardware di oggi. Sua modalità di funzionamento rende sua integrazione in architetture esistenti molto facile e privo di rischio, pur offrendo la possibilità di non esporre i fragili web server alla rete.”

Io non rilasciano alcuna garanzia che questo funziona per voi!

 

1 Nota preliminare

In questa esercitazione utilizza i seguenti host:

  • Bilanciamento del carico 1: lb1.example.com, indirizzo IP: 192.168.0.100
  • Bilanciamento del carico 2: lb2.example.com, indirizzo IP: 192.168.0.101
  • Web Server 1: http1.example.com, indirizzo IP: 192.168.0.102
  • Web Server 2: http2.example.com, indirizzo IP: 192.168.0.103
  • Abbiamo anche bisogno di un indirizzo IP virtuale che galleggia tra lb1 e lb2192.168.0.99

Ecco un piccolo diagramma che mostra il nostro programma di installazione:

IP condiviso = 192.168.0.99
192.168.0.100 192.168.0.101 192.168.0.102 192.168.0.103
——-+————+————–+———–+———-
|            |              |           |
+–+–+      +–+–+      +—-+—-+ +—-+—-+
LB1 | | LB2 | | http1 | | http2 |
+—–+      +—–+      +———+ +———+
HAProxy haproxy 2 web server (Apache) 
Wackamole Wackamole
Diffusione di diffusione

L’indirizzo IP (virtuale) condiviso non è nessun problema fino a quando sei nella tua LAN dove è possibile assegnare gli indirizzi IP come ti piace. Tuttavia, se si desidera utilizzare il programma di installazione con indirizzi IP pubblici, è necessario trovare un hoster dove è possibile noleggiare due server (nodi di bilanciamento del carico) nella stessa sottorete; è quindi possibile utilizzare un indirizzo IP libero in questa subnet per l’indirizzo IP virtuale.

configurazioni standard di Debian Etch Apache con il documento radice /var/www (la configurazione di questa impostazione predefinita vhost è memorizzata nel /etc/apache2/sites-available/defaulthttp1 e http2 . Se la radice del documento è diversa, potrebbe essere necessario regolare la guida un po’.

Per rendere le HAProxy sessione-consapevoli, sto assumendo che l’applicazione web che viene installato su http1 e http2 utilizza l’id di sessione JSESSIONID.

 

2 preparazione dei server Web di back-end

Si configurerà come un proxy trasparente, cioè HAProxy, passerà sull’indirizzo IP dell’utente originale in un campo denominato X-Forwarded-For ai server web back-end. Naturalmente, i server web di back-end devono accedere l’indirizzo IP dell’utente originale nei loro registri di accesso anziché gli indirizzi IP dei nostri servizi di bilanciamento del carico. Quindi dobbiamo modificare la riga LogFormat in /etc/apache2/apache2.conf e sostituire %h con % {X-Forwarded-For} io:

http1/http2:

vi /etc/apache2/apache2.conf
[...]
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[...]

Inoltre, si configurerà HAProxy per controllare la salute dei server back-end richiedendo continuamente il file txt (si traduce in/var/www/ www/check.txt se /var/www è la radice del documento) dai server back-end. Naturalmente, queste richieste sarebbero totalmente gonfiare i registri di accesso e rovinare le vostre statistiche di visualizzazione di pagina (se si utilizza uno strumento come Webalizer o AWstats che genera statistiche basate sui registri di accesso).

Quindi apriamo la nostra configurazione vhost (in questo esempio che è in /etc/apache2/sites-available/default) e mettere queste due righe in esso (commento fuori tutte le altre direttive CustomLog nella configurazione vhost):

vi /etc/apache2/sites-available/default
[...]
SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
[...]

Questa configurazione impedisce che le richieste di txt ottenere registrate nel log di accesso di Apache.

In seguito abbiamo riavviare Apache:

/etc/init.d/apache2 restart

… e creare il file txt (questo può essere un file vuoto):

touch /var/www/check.txt

Siamo finiti già con i server back-end; il resto della configurazione accade sui nodi di bilanciamento del due carico.

 

3 installazione HAProxy

Purtroppo HAProxy è disponibile come pacchetto Debian per Debian Lenny (stable) e Sid (unstable), ma non per Etch. Quindi installiamo il pacchetto HAProxy da Lenny. Per effettuare questa operazione, aprire /etc/apt/sources.list e aggiungere la riga http://ftp2.de.debian.org/debian/ deb lenny mainproprio /etc/apt/sources.list quindi potrebbe assomigliare a questo:

LB1/lb2:

vi /etc/apt/sources.list
deb http://ftp2.de.debian.org/debian/ etch main
deb-src http://ftp2.de.debian.org/debian/ etch main

deb http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

Naturalmente (in ordine di non rovinare il nostro sistema), vogliamo installare pacchetti da Lenny, solo se non c’è nessun pacchetto appropriato da Etch – se ci sono pacchetti da Etch e Lenny, vogliamo installare quello da Etch. Per fare questo, noi diamo pacchetti da Etch una priorità più alta del pinning del:

vi /etc/apt/preferences
Package: *
Pin: release a=etch
Pin-Priority: 700

Package: *
Pin: release a=lenny
Pin-Priority: 650

(I termini etch e lenny si riferiscono ai termini appropriati in /etc/apt/sources.list; se si utilizza stabile e test , è necessario utilizzare stabile e test invece di etch e lenny in /etc/apt/preferences come bene.)

In seguito, aggiorniamo il nostro database dei pacchetti:

apt-get update

(Se si ottiene un errore come questo:

E: Dynamic MMap ran out of room

quindi aprire /etc/apt/apt.conf.

vi /etc/apt/apt.conf

… e aggiungere una riga per Apt-limite con un valore molto elevato, ad esempio come questo:

APT::Cache-Limit "100000000";

Quindi eseguire

apt-get update  

ancora una volta.)

Aggiornare i pacchetti installati:

apt-get upgrade  

… e installare HAProxy:

apt-get install haproxy

 

4 configurazione di bilanciamento del carico

La configurazione di HAProxy è memorizzata in /etc/haproxy/haproxy.cfg ed è abbastanza straight-forward. Non spiegherò tutte le direttive qui; Per ulteriori informazioni su tutte le opzioni, si prega di leggere http://haproxy.1wt.eu/download/1.3/doc/haproxy-en.txt e http://haproxy.1wt.eu/download/1.2/doc/architecture.txt.

Abbiamo backup l’ originale /etc/haproxy/haproxy.cfg e crearne uno nuovo come questo:

LB1/lb2:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
cat/dev/null > /etc/haproxy/haproxy.cfg
vi /etc/haproxy/haproxy.cfg

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

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

listen webfarm 192.168.0.99:80
       mode http
       stats enable
       stats auth someuser:somepassword
       balance roundrobin
       cookie JSESSIONID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 192.168.0.102:80 cookie A check
       server webB 192.168.0.103:80 cookie B check

In seguito, impostiamo ENABLED su 1 in /etc/default/haproxy:

vi /etc/default/haproxy
# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
# Add extra flags here.
#EXTRAOPTS="-de -m 16"

5 impostazione Wackamole/diffusione

Noi abbiamo appena configurato HAProxy per l’ascolto sulla virtuale indirizzo IP 192.168.0.99, ma qualcuno deve dire lb1 e lb2 che dovrebbero stare ascoltare su quell’indirizzo IP. Questo è fatto da Wackamole e Spread che installiamo come questo:

LB1/lb2:

apt-get install wackamole

Per consentire HAProxy associare l’indirizzo IP condiviso, aggiungiamo la seguente riga a /etc/sysctl.conf:

vi /etc/sysctl.conf
[...]
net.ipv4.ip_nonlocal_bind=1

… ed eseguire:

sysctl -p

Successivamente abbiamo modificare /etc/default/spread e impostare la proprietà ENABLED su 1:

vi /etc/default/spread  
# Change to enable spread
ENABLED=1

# Options, see spread.1 for list
OPTIONS=""

La configurazione di diffusione si trova in /etc/spread/spread.confCreiamo una copia di backup del file originale e modificare spread.conf come segue:

cp /etc/spread/spread.conf /etc/spread/spread.conf_orig
cat/dev/null > /etc/spread/spread.conf
vi /etc/spread/spread.conf

Diffusione può inviare messaggi multicast o broadcast, quindi avete due scelte per la configurazione di diffusione.

Opzione 1 (messaggi Broadcast):

Spread_Segment 192.168.0.255 {
       lb1.example.com     192.168.0.100
       lb2.example.com     192.168.0.101
}

EventLogFile = /var/log/spread.log

EventTimeStamp

Opzione 2 (messaggi Multicast):

Spread_Segment 225.0.1.1 {
       lb1.example.com     192.168.0.100
       lb2.example.com     192.168.0.101
}

EventLogFile = /var/log/spread.log

EventTimeStamp

Diffusione si sentirà liberi di utilizzare i messaggi broadcast all’interno di una sub-rete di se si utilizzano i messaggi broadcast. Se IP-multicast è supportato dal sistema operativo, i messaggi saranno ricevuti solo da quelle macchine che sono nel gruppo e non da tutti gli altri nella stessa sub-rete come accade con gli indirizzi di broadcast

Ora possiamo avviare diffusione:

/etc/init.d/spread start

Per la configurazione di Wackamole. Aprire /etc/default/wackamole e impostare la proprietà ENABLED su 1:

vi /etc/default/wackamole
# Change to enable wackamole
ENABLED=1

# Options
OPTIONS=""

Quindi configurare Wackamole come segue:

cp /etc/wackamole.conf /etc/wackamole.conf_orig
cat/dev/null > /etc/wackamole.conf
vi /etc/wackamole.conf

Spread = 4803
SpreadRetryInterval = 5s
Group = wack1
Control = /var/run/wackamole/wackamole.it

Prefer None

VirtualInterfaces {
        eth0:192.168.0.99/24
}

Arp-Cache = 60s

Notify {
        eth0:192.168.0.1/32
        eth0:192.0.0.0/24
        arp-cache
}
balance {
        AcquisitionsPerRound = all
        interval = 4s
}
mature = 5s

La stanza di VirtualInterfaces è la parte più importante – conatins nostra interfaccia di rete (eth0 in questo esempio) insieme con il nostro indirizzo IP virtuale (192.168.0.99).

La stanza di notifica contiene host (es. router) o subnet per notificare quando passa l’indirizzo IP virtuale. Non è necessario, quindi potete lasciare fuori quella strofa, se ti piace.

(Si può imparare più circa la configurazione di Wackamole da un’occhiata

man 5 wackamole.conf

)

Finalmente abbiamo cominciato Wackamole su entrambi servizi di bilanciamento del carico:

/etc/init.d/wackamole start

Quindi eseguire:

ifconfig

su entrambi di bilanciamento del carico. Le uscite devono essere diverse – un bilanciatore ora dovrebbe possedere l’indirizzo IP virtuale, ad esempio come questo:

LB1: ~ # ifconfig
eth0 Link encap HWaddr 00: 0C: 29:A5:5B:93
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask: 255.255.255.0
inet6 addr: fe80::20c:29ff:fea5:5b93 / 64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: 1
RX pacchetti: 9578 errori: 0:0 overruns: 0 frame: 0
TX pacchetti: 6347 errori: 0:0 overruns: 0 carrier: 0
collisioni: 0 txqueuelen:1000
RX bytes: 8849468 (8,4 MiB) TX bytes: 811454 (792.4 KiB)
Indirizzo: 0x1400 Base di interrupt: 177

eth0: 1 Link encap HWaddr 00: 0C: 29:A5:5B:93
inet addr:192.168.0.99 Bcast:192.168.0.255 Mask: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: 1
Indirizzo: 0x1400 Base di interrupt: 177

lo Link encap Loopback
inet addr:127.0.0.1 Mask: 255.0.0.0
inet6 addr::: 1/128 Scope: Host
UP LOOPBACK RUNNING 16436 Metric: 1
RX packets:51 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes: 3528 (3,4 KiB) TX bytes: 3528 (3,4 KiB)

LB1: ~ #

Altri bilanciamento del carico, l’output dovrebbe essere come questo:

lb2:~# ifconfig
eth0 Link encap HWaddr 00: 0C: 29:E0:78:92
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask: 255.255.255.0
inet6 addr: fe80::20c:29ff:fee0:7892 / 64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: 1
RX packets:6550 errors:0 dropped:0 overruns:0 frame:0
TX packets:4109 errors:0 dropped:0 overruns:0 carrier:0
collisioni: 0 txqueuelen:1000
RX bytes:8591676 (8.1 MiB) TX bytes:377481 (368.6 KiB)
Indirizzo: 0x1400 Base di interrupt: 177

lo Link encap Loopback
inet addr:127.0.0.1 Mask: 255.0.0.0
inet6 addr::: 1/128 Scope: Host
UP LOOPBACK RUNNING 16436 Metric: 1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes: 824 (824.0 b) TX bytes: 824 (824.0 b)

LB2: ~ #

 

6 a partire HAProxy

Ora possiamo avviare HAProxy:

LB1/lb2:

/etc/init.d/haproxy start

 

7 test

Il nostro servizio di bilanciamento del carico di elevata disponibilità è ora attivo e funzionante.

È ora possibile fare richieste HTTP per il virtuale indirizzo IP 192.168.0.99 (o per qualsiasi dominio/nome host che sta puntando all’indirizzo IP virtuale), e si dovrebbe ottenere contenuto dai server web back-end.

È possibile testare le funzionalità di alta disponibilità/failover spegnendo un server web di back-end – il bilanciamento del carico deve quindi reindirizzare tutte le richieste al server web back-end rimanenti. In seguito, spegnere il sistema di bilanciamento del carico attivo (lb1) o interrompere Wackamole bilanciamento del carico attivo – lb2 dovrebbe assumere immediatamente. È possibile verificare che eseguendo:

LB2:

ifconfig

Ora si dovrebbe vedere l’indirizzo IP virtuale nell’output su lb2:

lb2:~# ifconfig
eth0 Link encap HWaddr 00: 0C: 29:e0:78:92
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask: 255.255.255.0
inet6 addr: fe80::20c:29ff:fee0:7892 / 64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: 1
RX packets:99050 errors:0 dropped:0 overruns:0 frame:0
TX packets:56342 errors:0 dropped:0 overruns:0 carrier:0
collisioni: 0 txqueuelen:1000
RX bytes: 144164308 (137,4 MiB) TX bytes: 4502509 (4,2 MB)
Indirizzo: 0x1400 Base di interrupt: 177

eth0: 1 Link encap HWaddr 00: 0C: 29:e0:78:92
inet addr:192.168.0.99 Bcast:192.168.0.255 Mask: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: 1
Indirizzo: 0x1400 Base di interrupt: 177

lo Link encap Loopback
inet addr:127.0.0.1 Mask: 255.0.0.0
inet6 addr::: 1/128 Scope: Host
UP LOOPBACK RUNNING 16436 Metric: 1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4296 (4.1 KiB) TX bytes:4296 (4.1 KiB)

LB2: ~ #

 

8 HAProxy statistiche

Potreste aver notato che abbiamo usato le opzioni attivare statistiche e statistiche auth someuser:somepasswordnella configurazione HAProxy nel capitolo 4. Questo permette di accedere alle statistiche di HAProxy (protetta da password) sotto l’ URL http://192.168.0.99/haproxy?statsQuesto è come appare:

Se non hai bisogno di statistiche, basta commentare o rimuovere le righe di statistiche dalla configurazione HAProxy.

 

  • HAProxy: http://haproxy.1wt.eu
  • Wackamole: http://www.backhand.org/wackamole/
  • Diffusione: http://www.spread.org/
  • Debian: http://www.debian.org

Piaciuto l'articolo? Condividilo sui social!

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp