Nov 042010
 

lvs Linux Virtual Server, LVS è una soluzione di bilanciamento del carico avanzato per sistemi Linux. Si tratta di un progetto open source avviato da Wensong Zhang nel maggio 1998. La missione del progetto è di costruire un server ad alte prestazioni e ad alta disponibilità per Linux utilizzando tecnologie di clustering, offrendo una buona scalabilità, affidabilità e facilità di manutenzione.

L’opera principale del progetto LVS è ora quello di sviluppare un software avanzato di bilanciamento del carico IP (IPVS), ed un software di bilanciamento a livello dell’applicazione (KTCPVS), ed i componenti di gestione dei cluster.



In informatica, il bilanciamento del carico è una tecnica utilizzata per diffondere carico di lavoro tra i molti processi, computer, reti, dischi o altre risorse, in modo che nessuna singola risorsa sia sovraccarica.

Esempi di bilanciamento nelle reti

Bilanciamento di carico al Layer-2

il bilanciamento del carico Layer-2, detto anche Link Aggregation, aggregazione porte, EtherChannel, o raggruppamento di porte etherchannel gigabit è quello di riunire due o più link in uno unico, collegamento logico che abbia una maggiore banda.
Un altro obiettivo dei collegamenti aggregati è quello di fornire tolleranza di errore e ridondanza, se ciascuno dei collegamenti aggregati segue un percorso fisico diverso.
L’aggregazione di Link può essere utilizzata per migliorare l’accesso alla rete pubblicha aggregando i collegamenti via modem o linee digitali. L’aggregazione di Link può anche essere utilizzata all’interno della rete aziendale per creare collegamenti di dorsale multigigabit tra switch Gigabit Ethernet.
Vedere anche NIC teaming o Link Aggregation Control Protocol (LACP)

Il kernel Linux ha il driver bonding, che può aggregare collegamenti multipli per un throughput più elevato o per fornire la tolleranza ai guasti.

Bilanciamento di carico al Layer-4lvs_architecture

Il Layer-4 è il bilanciamento del carico per distribuire le richieste ai server a livello di trasporto, come TCP, UDP e il protocollo di trasporto SCTP. Il bilanciamento del carico distribuisce le connessioni di rete da client che conoscono un solo indirizzo IP per un servizio, ad un insieme di server che di fatto eseguono il lavoro. Visto che il collegamento deve essere stabilito tra client e server nella modalità indicata dal trasporto (tcp-udp) prima di inviare una richiesta sul contenuto, il bilanciamento del carico sceglie di solito un server senza guardare il contenuto della richiesta.

IPVS è una implementazione di bilanciamento a layer-4 load implementata dal kernel Linux, e recentemente c’e’ stato un porting verso FreeBSD.

Bilanciamento di carico al Layer-7

Il bilanciamento del carico al Layer-7 , noto anche come bilanciamento del carico a livello di applicazione, è quello che analizza le richieste a livello di applicazione e distribuire le richieste ai server basandosi sui diversi tipi di richieste sui contenuti, in modo che si possa soddisfare requisiti di qualità del servizio per i diversi tipi di contenuti e migliorare le prestazioni generali del cluster. l’analizzare ogni singola richiesta nei sui contenuti è dispendioso in termini di CPU, quindi la scalabilità è limitata, rispetto al bilanciamento del carico a livello-4.

KTCPVS è una implementazione del bilanciamento di carico a layer-7 per il kernel Linux. Con gli appropriati moduli Apache, Lighttpd e nginx web servers possono anche loro fornire un bilanciamento a layer-7 come reverse proxy.

Ipvs in pratica

IPVS (IP Virtual Server) implementa un bilanciatore di carico a livello 4 della rete. IPVS in esecuzione su un host si comporta come un sistema di bilanciamento del carico di fronte ad un insieme di di server reali in cluster, può indirizzare le richieste per servizi basati si TCP/UDP ai veri server, e fa apparire i servizi dei server reali come un unico servizio virtuale su un unico indirizzo IP.

La componente IPVS è presente in tutti i recenti Kernel, per installare la componente in user-space utilizzate il vostro gestore di pacchetti, ad esempio in Ubuntu:

aptitude install ipvsadm

Il pacchetto ipvsadm non ha interfacce grafiche e segue il principio unix, fare una cosa sola e farla bene, quindi risponde al solo compito di avere uno strumento per il bilanciamento a livello 4

Metodi di bilanciamento utilizzati da LVS

Con ipvsadm è possibile selezionare un metodo per passare i pacchetti dal server LVS ai real server dove gira il servizio, i metodi principali sono:

  1. LVS-DR (direct routing) dove il MAC addresses nel pacchetto è cambiato ed il pacchetto indirizzatto verso il real server
  2. LVS-NAT basato sul network address translation (NAT)
  3. LVS-Tun (tunneling) where the packet is IPIP encapsulated and forwarded to the realserver.

LVS Cluster components and definitions

Client: una macchina con un client http  (qualsiasi browser).
Director:  Questa è la macchina che ridistribuisce il carico tra i “real-servers”. Il director è fondamentalmente un router, con tabelel di routing predisposte per il funzionamento di LVS.  Queste tabelle permettono al director di girare i pacchetti ai real server per tutti i servizi che sono in bilanciamento.
Real-servers: Queste sono le macchine con i servizi funzionanti.
VIP: Il director presenta un IP chiamato il Virtual IP (VIP) ai clienti. Quando un cliente si connette al VIP, il director gira il pacchetto del cliente ad un particolare realserver per tutta la durata della conenssione di quel cliente ad LVS. Questa connessione è scelta e gestita dal director.

LVS-DRdr

LVS-DR è basato sul prodotto IBM’s NetDispatcher. Il NetDispatcher si pone davanti ai webserver, che al cliente sembrano essere un unico webserver. Il NetDispatcher è stato utilizzato cpme server web per le olimpiadi di Atlanta e di Sydney e per la partita di scacchi tra Kasparov e Deep Blue.

Quando il pacchetto CIP->VIP arriva al director è inserito nella chains di OUTPUT al layer 2 modificando il pacchetto mettendo con dest = MAC address del realserver. Questo supera il problema di routing di un pacchetto con dest = VIP, dove il VIP è locale al director. Quando il pacchetto arriva al server reale, che trova che il pacchetto è indirizzato ad un IP locale al realserver (the VIP).

Ovvero si configura il VIP sul director su una scheda di rete “reale”, mentre sui real server lo stesso IP è configurato sull’interfaccia di loopback.

LVS-NATnat
LVS-NAT è basato sul cisco’s LocalDirector.

Questo metodo è stato il primo utilizzato da LVS. Se volete fare dei test con LVS questo è il metodo più semplice e quello che richeide meno configurazioni sui real server.
Con LVS-NAT, i pacchetti in ingresso sono riscritti dal director, cambiando il dst_addr dal VIP all’indirizzo di uno dei realservers e quindi rispendendo il pacchetto.
Le risposte dal realserver sono spedite al director dove i pacchetti sono riscritti e spediti al cliente, con il source address cambiato da quello del realserver al VIP.

LVS-Tun Introduzione

LVS-Tun è una modalità originale di LVS. Si base per alcuen cose sul metodo LVS-DR. LVS incapsula il pacchetto originale (CIP->VIP) dentro un pacchetto ipip da DIP->RIP, che è quindi messo nella catena di OUTPUT, dove è spedito al realserver.  Il realserver riceve il pacchetto su un dispositivo di tipo tunl0 e decapsula il pacchetto ipip, rivelando così il pacchetto originale CIP->VIP .

Questa è la metodologia meno utilzizata in produzione.

Basic Setup con ipvsadm

Questo è un esempio di comandi utilizzabili avendo 1 director che bilancia un indirizzo IP ($VIP) su 3 realserver ($REAL1,2,3)
Per prima cosa indichiamo che aggiungiamo un indirizzo da bilanciare con il comando:

#clear ipvsadm table
/sbin/ipvsadm -C
#installing LVS services with ipvsadm
#add http to VIP with weighted round robin scheduling
#Create the Virtual Server (http)
/sbin/ipvsadm -A -t $VIP:http -s wrr

A questo punto aggiungiamo i 3 real server in modalità LVS-DR

#forward http to realserver using direct routing with weight 1
# add all realserver you want
/sbin/ipvsadm -a -t $VIP:http -r $REAL1 -g -w 1
/sbin/ipvsadm -a -t $VIP:http -r $REAL2 -g -w 1
/sbin/ipvsadm -a -t $VIP:http -r $REAL3 -g -w 1

Per far funzionare questa configurazione avete bisogno che sui 3 realserver sia configurato sull’interfaccia di loopback il $VIP, ma fatto questo siete a posto, avete una configurazione di load balance per un servizio http funzionante.

Popular Posts:

Flattr this!

  One Response to “Introduzione a LVS”

  1. […] How to build a Linux cluster using the Linux virtual server kernel … Linux Virtual Server Logo Page Linux.com :: Building a Linux virtual server Introduction to LVS, Linux Virtual Server – LinuxariaDescription : Linux Virtual Server, LVS is an advanced load balancing solution for Linux systems.http://linuxaria.com/howto/int .. […]

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*