Argomento precedente: HALB - Utilità di bilanciamento del carico HTTP basato sulla sessione

Argomento successivo: ps8 - switch della porta scalabile

L3LB - Utilità di bilanciamento del carico TCP/UDP

Ultima versione: 2.0.2-1

L3LB - Utilità di bilanciamento del carico TCP/UDP

In breve

Catalogo

Sistema

Categoria

Switch

Volumi di utente

no

Min. Memoria

96 M

OS

Linux

Vincoli

no

Panoramica funzionale

L3LB è uno switch per la distribuzione delle sessioni TCP/UDP in entrata ai server dello stesso tipo o di tipo differente. La funzionalità di bilanciamento del carico TCP si basa sul pacchetto software di bilanciamento del carico TCP/HTTP di HAProxy; il bilanciamento del carico UDP si basa su Netfilter.

L3LB bilancia il carico del traffico in entrata usando diversi algoritmi. Per il traffico TCP, L3LB esegue un semplice bilanciamento del carico round-robin eguagliando il carico per i server di backend. Per TCP, L3LB supporta inoltre le sessioni persistenti, legando il client a un particolare server di backend usando l'indirizzo di IP di origine come codice. Per il traffico UDP, L3LB usa l'algoritmo round-robin (questo è l'unico algoritmo disponibile per il traffico di UDP).

L3LB monitora costantemente lo stato di tutti i server di backend. Quando è in modalità TCP, gli healthcheck condotti da L3LB sono un semplice controllo di connessione TCP. In caso di un errore del server rilevato da L3LB usando il metodo di healthcheck parametrizzato, L3LB passa il traffico a un server alternativo. Se il server guasto recupera, L3LB può riportare il traffico a tale server. Per modalità UDP, è usato un PING ICMP per verificare la disponibilità di un server di backend.

L3LB espone un'interfaccia di servizio Web sul suo terminale di ctl. Questa interfaccia permette all'utente di abilitare/disabilitare in modo pragmatico i terminali di output out1 - out8 e di recuperare lo stato di tutti i terminali. Ciò è utile in caso di guasto di backend (ad esempio in un'appliance di storage o del database) in cui l'applicazione stessa può disabilitare automaticamente il traffico a una serie di server specifici. In questo caso, L3LB non è in grado di rilevare questo tipo di errore; quindi, sta all'applicazione individuare il guasto e disabilitare la serie di server di backend corrispondenti.

L3LB è progettato per essere estremamente velocemente usando pochissime risorse. In normali condizioni di utilizzo, L3LB usa circa 25 KB di memoria in ogni sessione, o 1 GB per 40000 sessioni simultanee ed elabora fino a 6000 richieste al secondo.

Limite

Risorse

Risorsa

Minimo

Massimo

Predefinito

CPU

0,1

16

0,4

Memory (Memoria)

96 MB

32 GB

96 MB

Larghezza di banda

1 Mbps

2 Gbps

250 Mbps

La quantità di memoria assegnata a L3LB non aumenta la velocità effettiva o il tempo di risposta. L3LB è un'appliance associata alla CPU/larghezza di banda.

Terminali

nome

dir

prot.

descrizione

in

in

Qualsiasi

Input comune. Le richieste TCP inviate a IN sono indirizzata a uno degli output, o mediante la selezione di round-robin o mediante informazioni di sessione basate sull'origine.

ctl

in

HTTP

Terminale di controllo che è usato per abilitare/disabilitare gli output e recuperare lo stato del terminale di output.

out1-out8

out

Qualsiasi

Output bilanciati. È possibile lasciare uno qualsiasi e tutti questi output non connessi; il traffico è distribuito soltanto agli output abilitati e connessi. Per impostazione predefinita, tutti i terminali sono abilitati.

mon

out

CCE

Serve per le statistiche di utilizzo delle prestazioni e delle risorse.

Proprietà

Proprietà generali

nome

tipo

descrizione

modalità

Stringa

Specifica la modalità di operazione. I valori validi sono:
tcp_roundrobin - le sessioni del TCP in entrata sono distribuite attraverso tutti i server di backend connessi e abilitati in modalità di round-robin.
tcp_source - l'indirizzo IP sorgente della richiesta TCP è usato per legare la sessione a un server di backend specifico.
udp_roundrobin - L3LB opera in modalità di bilanciamento del carico di UDP.
Predefinito: tcp_roundrobin.

porte

Stringa

Un elenco di porte e intervalli di porte delimitato da spazio o virgola che L3LB inoltra ai server di backend. Gli intervalli di porta sono specificati come lower_port:higher_port con il trattino ("-") o i due punti (":") come separatore tra loro. Esempio: 80,81,90-99 110:120 140 141. Il traffico ricevuto a una porta non specifica è lasciato cadere.
Valore predefinito: 80

max_connections

numero intero

Numero massimo di connessioni attive concorrenti che ciascun nodo L3LB è in grado di gestire. Quando questo numero viene raggiunto, le nuove connessioni sono comunque accettate ma la loro elaborazione è ritardata fino alla chiusura di un'altra connessione. All'avvio, L3LB determina automaticamente il numero massimo di connessioni in base alla memoria disponibile, lo confronta al valore di questa proprietà e usa il valore inferiore. Se questa proprietà è pari a 0, allora viene usato il valore calcolato. Né la memoria disponibile, né un'impostazione esplicita di questa proprietà hanno un effetto diretto sulla velocità effettiva dell'utilità di bilanciamento del carico o sulla sua velocità di richiesta massima. Se si imposta un numero basso (o se la memoria disponibile è poca), la risposta è influenzata soltanto se i server di backend stanno eseguendo lunghe operazioni per ogni richiesta (ad es., ricerche di database) e molte richieste rimangono aperte allo stesso tempo. Questa proprietà è valida soltanto per le modalità di operazione tcp_roundrobin e tcp_source.
Valore predefinito: 0

backup_outputs

Stringa

Un elenco di output delimitato da spazio o virgola (out1 - out8) che sono considerati server di backup. Gli intervalli di output (out1-out3) NON sono supportati. Il traffico è diretto ai server di backup soltanto se nessun server di backend è disponibile. Lo scopo di tali server di backup è di notificare i client che qualcosa non va oppure di reindirizzarli, piuttosto che immettere errori di timeout o di backend non disponibile. Esempio: out1,out2,out3. Se vuoto, nessun server di backup viene utilizzato.
Predefinito: " (nessun server di backup viene utilizzato).

Proprietà di healthcheck

Un TCP semplice si connette alla prima porta specificata nella proprietà delle porte viene utilizzata per le modalità di operazione tcp_roundrobin e tcp_source. Il ping di ICMP è sempre usato nella modalità di operazione udp_roundrobin.

nome

tipo

descrizione

healthcheck_interval

Int

Intervallo tra gli healthcheck; specificato in secondi. Non viene eseguito alcun healthcheck se questa proprietà è 0.
Valore predefinito: 20

Proprietà di timeout

Questa proprietà è valida soltanto per le modalità di operazione tcp_roundrobin e tcp_source.

nome

tipo

descrizione

client_timeout

Int

Timeout in secondi di attesa di una richiesta da un client dopo che è stata stabilita una connessione.
Predefinito: 150

server_timeout

Int

Timeout in secondi di attesa di una risposta da un server Web di backend dopo che è stata stabilita una connessione.
Predefinito: 150

conn_timeout

Int

Timeout in secondi per stabilire una connessione TCP da L3LB attraverso uno dei suoi terminali (inclusi gli healthcheck). Quando L3LB è sotto carico di rete, healthcheck potrebbe eseguire un timeout nel caso in cui l'impostazione è impostata su un valore molto basso (in questi casi L3LB disabilita gli output che possono risultare in un'operazione imprevista). Si raccomanda di non impostarlo al di sotto di 20 secondi.
Predefinito: 20

Proprietà di interfaccia di servizio Web

nome

tipo

descrizione

ctl_port

Int

Porta usata per accedere all'interfaccia di controllo del servizio Web mediante il terminale CTL.
Predefinito: 80

Contatori personalizzati

L'appliance di L3LB riporta i seguenti calcolatori personalizzati usando il terminale MON.

I seguenti calcolatori appartengono al gruppo di calcolatori di L3LB: X può avere un valore da 1 a 8.

Nome di contatore

Descrizione

outX_status

Stato di terminale di output outX: 0 - abilitato e in cima a, 1 - abilitato e lungo, 100 - disconnesso.

outX_queue

Numero di richieste in coda per il terminale outX. Questo contatore non viene riportato nella modalità udp_roundrobin.

outX_queue_max

Massimo storico di richieste in coda simultaneamente per il terminale outX. Questo contatore non viene riportato nella modalità udp_roundrobin.

outX_sessions

Numero di sessioni attive per il terminale outX.

outX_sessions_max

Numero massimo di sessioni simultanee attive per il terminale outX.

outX_sessions_total

Numero di sessioni completate per il terminale outX. Questo contatore non viene riportato nella modalità udp_roundrobin.

outX_errors

Numero di healthcheck non riusciti per il terminale outX.

coda

Lunghezza di coda attuale, cumulativa per out1 - out8. Questo contatore non viene riportato nella modalità udp_roundrobin.

queue_max

Massimo storico di richieste in coda simultaneamente, cumulative per out1 - out8. Questo contatore non viene riportato nella modalità udp_roundrobin.

sessions_active

Numero di sessioni attive, cumulativo per out1 - out8.

sessions_max

Numero storico di sessioni attive, cumulativo per out1 - out8.

sessions_total

Numero di sessioni completate, cumulativo per out1 - out8. Questo contatore non viene riportato nella modalità udp_roundrobin.

errori

Numero di errori di healthcheck, cumulativo per out1 - out8.

Prestazioni

Tasso di richiesta

L3LB indirizza non meno d 6000 transazioni (coppia richiesta/risposta) al secondo, in base alla dimensione del documento e alla larghezza di banda di rete disponibile.

Velocità effettiva di dati

L3LB dirige non meno d 15 MByte/secondo

Connessioni concorrenti

L3LB supporta non meno d 2000 richieste in sospeso in concorrenza. (Una richiesta pendente è una connessione TCP aperta dal client, su cui è presente una o più richieste TCP non completate). Il valore massimo di connessioni concorrenti dipende dalla memoria libera disponibile e può essere di fino a 40000. L3LB è stato testato per il supporto di oltre 15000 trasferimenti attivi simultanei.

Messaggi di errore

In caso di errore nell'avvio dell'appliance, è possibile che vengano registrarti i seguenti errori nel log di sistema:

Messaggio di errore

Descrizione

Errore: impossibile determinare la configurazione di memoria dell'appliance. Si prega di contattare il Supporto di CA Technologies.

L3LB non è riuscito a rilevare il valore della memoria disponibile. Si prega di contattare il Supporto di CA.

Errore: impossibile creare il file di configurazione di HAProxy. Si prega di contattare il Supporto di CA Technologies.

L3LB non è riuscito a creare il file di configurazione di HAProxy. Si prega di contattare il Supporto di CA Technologies.

Errore: impossibile determinare il numero di CPU disponibili. Si prega di contattare il Supporto di CA Technologies.

L3LB non è riuscito a rilevare il valore di CPU disponibile. Si prega di contattare il Supporto di CA.

Errore: specificata una modalità di operazione non valida

Specificata modalità non valida, dovrebbe essere una fra tcp_roundrobin, tcp_source or udp_roundrobin

Errore: il valore di ctl_port deve essere compreso tra 1 e 65535.

il valore di ctl_port deve essere superiore a 1 e inferiore a 65535.

Errore: impossibile avviare L3LB; consultare il file di log '/var/log/appliance/log' per ulteriori informazioni.

Si è verificato un errore di sistema all'avvio di L3LB. Si prega di contattare il Supporto di CA Technologies.

Errore: impossibile inizializzare l'interfaccia del servizio Web di controllo. Si prega di contattare il Supporto di CA Technologies.

Si è verificato un errore di sistema durante l'inizializzazione dell'interfaccia del servizio Web di controllo esposta al terminale di ctl. Si prega di contattare il Supporto di CA Technologies.

Errore: impossibile inizializzare il report delle statistiche, contattare il Supporto di CA Technologies.

Si è verificato un errore di sistema durante l'inizializzazione del report delle statistiche. Si prega di contattare il Supporto di CA Technologies.

Errore: impossibile inizializzare il terminale dell'interfaccia utente. Si prega di contattare il Supporto di CA Technologies.

Si è verificato un errore di sistema durante l'inizializzazione dell'interfaccia del servizio Web di controllo esposta al terminale di ui. Si prega di contattare il Supporto di CA Technologies.

Controllo Programmatic dei terminali di output

Panoramica

Un'interfaccia di servizio Web di controllo è esposta al terminale di ctl (sulla porta configurata) permettendo di abilitare o disabilitare i terminali di output (out1 - out8) e di recuperare lo stato del terminale corrente.

Protocollo

Il protocollo utilizza solamente il metodo HTTP GET, in quanto fornisce una funzionalità di sola lettura. Per questo motivo ogni tipo di richiesta di protocollo supportato può essere definito per mezzo dell'URI e della struttura di output. I caratteri che vengono considerati speciali per l'URI dovrebbero essere evitati mediante lo standard di codifica %.

Segue una descrizione di tutti gli URI supportati.

Chiamate di controllo

Come disabilitare i terminali di output

Esistono due formati distinti per disabilitare la chiamata di controllo, in base a come viene identificato il terminale di output:

Richiesta: /api/disable?channel=out3 (disabilita il terminale di output out3)

Richiesta: /api/disable?10,11.12.13 (disabilita il terminale di output che è connesso al server Web con l'indirizzo IP di 10.11.12.13)

Risposta:

L3LB restituisce la seguente struttura con un codice di stato e un messaggio di stato facoltativo:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message"
   }
}

I possibili valori di codice di stato sono elencati di seguito:

Valore di codice

Descrizione

0

L'operazione è riuscita, il terminale è stato disabilitato.

10

L'operazione non è riuscita, la configurazione di L3LB non è stata modificata. Le cause più probabili sono che il terminale è già disabilitato o l'indirizzo IP specificato non è valido.

100

Si è verificato un errore durante l'elaborazione della richiesta. Per maggiori informazioni, consultare il messaggio di stato.

Come abilitare i terminali di output

Esistono due formati distinti per abilitare la chiamata di controllo, in base a come viene identificato il terminale di output:

Richiesta: /api/enable?channel=out3 (abilita il terminale di output out3)

Richiesta: /api/disable?10,11.12.13 (abilita il terminale di output che è connesso al server Web con l'indirizzo IP di 10.11.12.13)

Risposta:

L3LB restituisce la seguente struttura con un codice di stato e un messaggio di stato facoltativo:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message"
   }
}

I possibili valori di codice di stato sono elencati di seguito:

Valore di codice

Descrizione

0

L'operazione è riuscita, il terminale è stato abilitato.

10

L'operazione non è riuscita, la configurazione di L3LB non è stata modificata. Le cause più probabili sono che il terminale è già abilitato o l'indirizzo IP specificato non è valido.

100

Si è verificato un errore durante l'elaborazione della richiesta. Per maggiori informazioni, consultare il messaggio di stato.

Recupero dello stato del terminale di output

Richiesta: /api/status (restituisce lo stato di tutti i terminali di output)

Risposta:

L3LB restituisce la seguente struttura con un codice di stato e un messaggio di stato facoltativo:

{
   "status" :
   {
   "code": code_value,
   "message": "status_message",
   "terminal_id": "terminal_state",
   "terminal_id": "terminal_state",
   ...
   }
}

Lo stato è restituito soltanto per i terminali connessi; lo stato per i terminali disabilitati e disconnessi non è riportato.

I possibili valori di codice di stato sono elencati di seguito:

Valore di codice

Descrizione

0

L'operazione è riuscita.

100

Si è verificato un errore durante l'elaborazione della richiesta. Per maggiori informazioni, consultare il messaggio di stato.

I possibili valori di terminale sono out1 - out8.

I possibili valori di stato sono:

Valore di stato

Descrizione

up

Il terminale è connesso e attivo.

down

Il terminale non è attivo. Il server Web che è connesso a questo terminale non è attivo o non è riuscito a eseguire l'healthcheck di L3LB.

Un esempio di output di stato:

{
   "status" :
   {
   "code": 0,
   "message": "",
   "out1": "up",
   "out2": "up",
   "out3": "down",
   "out4": "up"   

}

Uso tipico

Cluster Webmail di bilanciamento del carico

I messaggi di posta elettronica sono diventati una parte importante dei processi aziendali correnti, quindi i cluster di webmail devono essere disponibili 24 ore su 24, 7 giorni alla settimana. L'esempio di seguito mostra è possibile utilizzare HALB e L3LB insieme per eseguire il bilanciamento di carico e aumentare la disponibilità dei server di webmail e smtp. In caso di errore, i server possono disabilitare gli output di HALB o L3LB attraverso l'interfaccia di ctl. La modalità L3LB tcp_roundrobin è usata in questo caso.

Modalità di utilizzo congiunto di HALB e L3LB per bilanciare il carico e aumentare la disponibilità di server Webmail e SMTP

Bilanciamento del carico del server delle applicazioni

Raramente un sito Web moderno serve solo contenuto statico. Di solito molta elaborazione sul lato server è fatta sul lato server. Questo diagramma di esempio illustra come eseguire il bilanciamento di carico di un accesso ininterrotto da una cluster di server Web ad alcuni server di applicazioni (in questo caso Apache Tomcat). la modalità di operazione tcp_source garantisce un supporto corretto del server Web alla sessione del server di applicazione.

Bilanciamento del carico del server delle applicazioni

Bilanciamento del carico del servizio voice-over-IP

I comuni protocolli Voice Over IP usano UDP come protocollo principale. Il bilanciamento del carico del traffico è cruciale per un facile ridimensionamento di cluster di VoIP. In questo esempio, viene usata la modalità di operazione udp_roundrobin.

Bilanciamento del carico del servizio voice-over-IP

Note

Software Open Source e di terze parti utilizzato all'interno dell'appliance

L3LB usa i seguenti pacchetti Open Source di terze parti oltre ai pacchetti Open Source di terze parti usati dalla loro classe di base LUX5.

Software

Versione

Modificato

License

Note

haproxy

1.2.18

No

GPLv2

Home page

libxml2

2.6.26

No

MIT

N/D

php-thttpd

2.25b

No

BSD

N/D

libipt_statistic

1.3.5-1.2.1

No

GPLv2

Home page

iptables

1.3.5-1.2.1

No

GPLv2

Home page

Progetto di implementazione

Classe di base

L'immagine dell'appliance LUX5 è usata come classe di base per l'appliance di L3LB.

Volumi di classe

Non occorre alcun ridimensionamento del disco, L3LB usa le impostazioni predefinite per la classe LUX5 di base.

Contenuti della directory di L3LB

Il software di L3LB è installato nella struttura secondaria /appliance.

script healthcheck udp_healthchecker.pl per modalità di operazione di udp.

Pacchetti

Sono installati i seguenti pacchetti standard (dal mirror ufficiale):

Inoltre, sono installati i seguenti pacchetti personalizzati (origini incluse).

Contenuti della directory di versione:

Immagine dell'appliance esportata:

Origini:

Test (consultare il piano di test CatSwitchesL3LBTp e le note di versione CatSwitchesL3LBRelNotes):

l3lb-24-test.1.0.0.tar.bz2 - script di test per CA 3Tera AppLogic 2.4

Teoria di operazione

L3LB usa un servizio a background unico: l'utilità di bilanciamento del carico TCP/HTTP di HAProxy (http://haproxy.1wt.eu). Ai fini del bilanciamento del carico TCP, è abilitata soltanto la modalità di operazione di TCP.

Sono definiti un numero di listener e backend nel file di configurazione haproxy.cfg, che è creato dallo script di appliance.sh all'avvio dell'appliance usando i valori di proprietà configurati. Viene creato un listener per il terminale IN che è usato per tutto il traffico di rete in entrata il cui carico deve essere bilanciato. Un altro listener è creato sull'interfaccia UI per l'esportazione delle statistiche GUI all'utente. Un listener aggiuntivo è creato sull'interfaccia lo0 di loopback interno per l'estrazione delle statistiche di runtime e il report attraverso il terminale di MON. Ciascun terminale di outX connesso è definito come backend cui il traffico in entrata può essere inoltrato.

Il listener sul terminale IN riceve una richiesta HTTP e, in base alla modalità di operazione, modifica il cookie in modalità passiva, di inserimento e sincronizzazione. La richiesta è quindi inoltrata a uno dei server di backend. Se vi è una sessione esistente per questa richiesta, questa è inoltrata allo stesso server di backend per tutte le richieste precedenti. Se vi è alcun sessione esistente per questa richiesta, il server di backend è selezionato da round-robin. La risposta dal server è modificata nuovamente e inoltrata al client.

Configurazione

Il file di configurazione per HAProxy è generato all'avvio dello script di appliance.sh init. Esso usa le proprietà definite in /etc/applogic.sh e se ne serve per creare un file di configurazione di /appliance/haproxy.cfg. Alcune proprietà aggiuntive che sono calcolate all'avvio sono scritte nei file di configurazione (l'ulimit-n, nbproc, indirizzo di bind).

File di log

La registrazione della richiesta è disabilitata in L3LB e soltanto gli errori critici sono riportati nel log di sistema (eccetto questo, non vi è registrazione).

Note

Questa appliance usa software Open Source e di terze parti

L3LB usa i seguenti pacchetti Open Source di terze parti oltre ai pacchetti Open Source di terze parti usati dalla loro classe di base LUX5.

Software

Versione

Modificato

License

Note

haproxy

1.4.9

No

GPLv2

pagina iniziale

php-thttpd

2.25b

No

BSD

N/D

libipt_statistic

1.3.5-1.2.1

No

GPLv2

pagina iniziale

iptables

1.3.5-5.3.el5_4

No

GPLv2

pagina iniziale