bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Load balancing a costo zero con Apache

Se avete le necessità di creare un load balancing fra diversi Web Server Apache, nel caso in cui ad esempio volete scalare il vostro sito web su più server in modo da ottenere maggiori performance, con una veloce configurazione del DNS e di Apache si riesce ad ottenere un ottimo risultato senza investire migliaia di euro in hardware dedicato (come ad esempio Radware).

L'esempio che riporto sotto utilizza due server in load balancing, ma il concetto si applica allo stesso identico modo a qualsiasi numero di server.

Utilizziamo per il nostro esempio il dominio example.org e vediamo come configurare il DNS e Apache in modo che ci siano due macchine identiche che servono gli stessi contenuti.

Iniziamo con la configurazione del DNS. Al nostro scopo è necessario inserire 4 entry:

www.example.org A 10.0.0.1

www.example.org A 10.0.0.2

www1.example.org A 10.0.0.1

www2.example.org A 10.0.0.2

Le prime due entry sfruttano la capacità di BIND di fare round robin su 2 o più indirizzi IP. In questo modo quando i nostri utenti cercheranno di risolvere www.example.org verranno reindirizzati a turno sull'IP 10.0.0.1 e 10.0.0.2 ottenendo l'effetto che il 50% degli utenti si collegherà al primo server e il 50% al secondo.

Le entry www1 e www2 ci serviranno invece per identificare univocamente i singoli server.

In molti casi questa semplice configurazione del DNS è sufficiente per ottenere l'effetto di load balancing, ma cosa succede se il nostro sito è leggermente più complesso di alcune semplici pagine statiche e richiede quindi l'utilizzo di sessioni fra Apache e il browser e non abbiamo un sistema di replica di queste ultime fra i nostri server?

Facciamo un esempio pratico:

  • visito per la prima volta il sito www.example.org
  • il DNS mi risolve www.example.org con l'ip10.0.0.1
  • il DNS ha un TTL di 900 secondi
  • il mio browser si collega al server 10.0.0.1
  • sul mio sito è presente un sistema di login, perciò mi loggo e a quel punto mi viene creata una sessione che mi permette di navigare nella mia area riservata
  • dopo 900 secondi, cioè 15 minuti, il TTL per www.example.org scade, perciò il mio sistema operativo chiederà nuovamente di risolvere www.example.org
  • questa volta www.example.org viene risolto con IP10.0.0.2
  • appena mi collego al server 10.0.0.2, avendo io una sessione con l'IP 10.0.0.1, risulto come non loggato, perciò non riesco ad accedere alla mia area riservata a meno di non rieseguire il login

Per ovviare a questo problema, dobbiamo fare in modo che l'utente si colleghi sempre allo stesso server, ed è qui che entra in gioco un semplice configurazione di Apache.

Sarà sufficiente definire due virtual host per ogni singola macchina:

SERVER 1

<VirtualHost *:80>

DocumentRoot /var/www/

ServerName www.example.org

RewriteEngine On

RewriteRule ^/(.*) http://www1.example.org/$1

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/site/html
ServerName www1.example.org
</VirtualHost>

SERVER 2

<VirtualHost *:80>

DocumentRoot /var/www/

ServerName www.example.org

RewriteEngine On

RewriteRule ^/(.*) http://www2.example.org/$1

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/site/html
ServerName www2.example.org
</VirtualHost>
In questo modo alla prima connessione a www.example.org, grazie al primo virtual host di ogni macchina e alla RewriteRule, verrò reindirizzato rispettivamente o a www1.example.org o a www2.example.org. Questo mi assicura che tutte le future connessioni (fino a quando non chiudo il browser), verranno fatte sempre alla stessa macchina (www1 o www2 a seconda del caso).
Questo metodo vi fornisce un sistema a costo zero per creare un load balancing, ma ha naturalmente un paio di limitazioni importanti:
  • non è fault tolerant: se uno dei server è down, il sistema non lo esclude automaticamente e bisognerà modificare a mano il DNS per escludere il server non funzionante
  • non c'è controllo sul carico e sul numero di utenti verso una singola macchina. Lo smistamento avviene solo a livello di DNS il quale come indicato precedentemente risponderà la prima volta con il primo IP, la seconda volta con il secondo IP e così via ciclicamente. Se ho 100 utente contemporaneamente, 50 andranno su un server e gli altri 50 su un altro. Se dopo 5 minuti 40 utenti del primo server abbandonano la sessione e mi arrivano altri 100 utenti, avrò 60 utenti sul primo server e 100 sul secondo

A parte questo è un ottimo sistema per soluzioni low budget :-)

Precedente
Commenti
Nessun commento. Vuoi essere il primo.