Argomento precedente: SwitchArgomento successivo: L3LB: utilità di bilanciamento del carico TCP/UDP


HALB: utilità di bilanciamento del carico HTTP

Ultima versione: 3.1.2-1

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

In breve

Catalogo

Sistema

Categoria

Switch

Volumi dell'utente

no

Num. minimo memoria

96 M

OS

Linux

Vincoli

no

Introduzione

HALB è uno switch per la distribuzione del carico di lavoro a più server Web dello stesso tipo o di tipo differente. HALB è basato sul pacchetto software di bilanciamento del carico di HAProxy TCP/HTTP; quale viene progettato per essere estremamente veloce consumando poco risorse.

HALB esegue le funzioni di bilanciamento del carico usando diversi algoritmi. Esegue un semplice bilanciamento del carico round-robin eguagliando il carico per i server di backend. Supporta inoltre le sessioni persistenti, legando il client a un particolare server di backend usando l'indirizzo di IP di origine come codice. Utilizzando i cookie di sessione, qualsiasi nuova sessione che non ha cookie di sessione viene distribuito mediante l'algoritmo round-robin. HALB supporta sessioni con più cookie e modifica e/o tiene traccia soltanto di quelli necessari, lasciando gli altri intatti. Una sessione o client particolare può essere legato a un server Web di backend o applicazione specifica usando l'associazione di cookie. I cookie esistenti possono essere modificati da HALB per i client che non supportano le richieste con più cookie.

HALB monitora costantemente lo stato di tutti i server Web di backend. I controlli di stato condotti da HALB possono includere una semplice connessione TCP o una richiesta HTTP più complessa (specificata sul limite di HALB). In caso di un errore del server rilevato da HALB usando il metodo di healthcheck parametrizzato, HALB passa il traffico a un server alternativo. Se il server guasto recupera, HALB può riportare il traffico a tale server.

HALB 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, HALB 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.

HALB mantiene statistiche dettagliate incluso lo stato di backend, il numero di richieste elaborate per server, il numero di errori verificatisi, ecc. Le statistiche sono riportate attraverso il terminale di MON e i contatori separati sono esposti mediante il terminale di ui come GUI accessibile con un browser.

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

Risorse

Risorsa

Minimo

Massimo

Predefinito

CPU

0.1

16

0.4

Memoria

96 MB

32 GB

96 MB

Larghezza di banda

1 Mbps

2 Gbps

250 Mbps

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

Terminali

name

dir

protocollo

description

in

in

HTTP

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.

ui

in

HTTP

Serve le richieste HTTP che vengono dai client Web. Serve HTTP/1.1 e i protocolli 1.0.

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

name

type

description

modalità

Stringa

Specifica la modalità di operazione e un modo per utilizzare il cookie della sessione denominato per l'identificazione della sessione. I valori validi sono:
passivo - il cookie non è modificato. Si suppone che un dato valore di cookie sia sempre unico e che lo stesso valore non sia utilizzato da un altro server.
synch - la stringa di cookie nella risposta HTTP da un server è modificata per renderla unica per il terminale da cui proveniva la risposta (aggiungendo un ID di terminale di 4 caratteri nel valore del cookie). 'terminal ID' è rimosso prima che una richiesta venga inoltrata a un server su uno dei terminali outX. Oltre che a inserire l'ID terminale, il mapping fra i valori del cookie e i terminali di output sono uguali al passivo, ossia viene confrontato il valore intero del cookie.
insert - l'utilità di bilanciamento del carico inserisce un cookie nelle risposte rimandate al client, così quando il client invia le richieste successive con quel cookie, esse sono reindirizzate al server della prima richiesta da quel client. Il cookie inserito da HALB non ha una data di scadenza, ovvero non è salvato in modo permanente dal software client.
source - l'indirizzo IP sorgente della richiesta è utilizzato per collegare la sessione a un server Web di backend specifico. La proprietà di cookie viene ignorata.
Predefinito: passivo.

cookie_name

Stringa

Il nome del cookie usato per identificare una sessione. Per le modalità passive (passive e synch - consultare la proprietà di modalità descritta di seguito), ovvero il nome del cookie usato dai server di backend connessi ad out1 - out8 ai fini dell'identificazione delle sessioni del client. Per la modalità di inserimento, questo è il nome del cookie che HALB dovrebbe inserire nelle risposte HTTP in modo che ciascun client "rimanga" con un solo server. Se questa proprietà è impostata sul valore vuoto, non viene tenuta traccia della sessione e tutte le richieste sono distribuite nella tipica modalità round-robin. Ignorato per la modalità di origine.
Predefinito: (vuoto).

cookie_check_length

Int

Definisce il numero di byte dal valore di cookie usato come codice unico in modalità operativa passiva per combinare la sessione al server Web di backend. Il valore predefinito di 10 è in genere sufficiente per tutte le comune applicazioni PHP e java. Questo valore deve essere sempre uguale o inferiore alla lunghezza del valore del cookie.
Predefinito: 10

max_connections

numero intero

Il numero massimo di connessioni attive concorrenti che l'utilità di bilanciamento del carico gestisce. 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, HALB 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.
Valore predefinito: 0

backup_outputs

Stringa

Un elenco di output delimitato da spazio o virgola (out1 - out8) che sono considerati backup. 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.
Predefinito: (vuoto).

Proprietà di timeout

name

type

description

timeout

numero intero

Timeout in secondi alla scadenza delle sessioni inattive. Se impostato su zero, le sessioni inattive non scadono. Se impostato su un valore diverso da zero, le sessioni inattive riprese dopo i secondi di timeout sono considerate vecchie e le richieste recanti il cookie 'forgotten' sono trattate come se non avessero alcun cookie e sono reindirizzate a un server casuale mediante il metodo usuale round-robin. Questa proprietà è valida esclusivamente per la modalità passiva ed è ignorata nelle altre modalità.
Valore predefinito: 0

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. Ciò include gli healthcheck. Prestare particolare attenzione a questa impostazione perché, se il carico è elevato, gli healthcheck vanno in timeout perché il valore non è abbastanza ridotto, e HALB inizia a disabilitare gli output. Si raccomanda di non impostarlo al di sotto di 20 secondi.
Predefinito: 20

Proprietà di healthcheck

name

type

description

healthcheck_url

Stringa

L'URL usato per eseguire l'healthcheck dei server Web di backend nei metodi di healthcheck http_get e http_head dei server Web. Può essere specificato come URL completo (http://host.name/file/to/check/for.php) o come percorso relativo (/file/to/check/for.php). Se specificato come URL, HALB usa il protocollo HTTP/1.1 mentre esegue gli healthcheck usando uno nome di host estratto da UR, in un host: intestazione. Questo permette l'utilizzo di host virtuali. Se specificato come percorso relativo, HALB usa il protocollo HTTP/1.0 e controlla il documento specificato da questa proprietà. Se questa proprietà è vuota, HALB controlla la radice predefinita '/' usando il protocollo HTTP/1.0.
Predefinito: (vuoto).

healthcheck_agent

Stringa

La stringa usata come identificatore di agente per i metodi di healthcheck http_get e http_head. Se vuoto, viene usato HALB-health-check.
Predefinito: (vuoto).

healthcheck_method

Stringa

Il metodo usato per l'healthcheck dei server Web di backend.
tcp_connect - HALB ne connette a porta 80 del server Web. Se la connessione riesce, HALB suppone che il server Web è funzionale. Questo è il metodo più veloce e che richiede meno risorse.
http_head - HALB utilizza il metodo HEAD per richiedere il documento specificato dalla proprietà di healthcheck_url. Questo è più lento di tcp_connect, richiede più risorse sul lato HALB e server Web, ma è più affidabile. Un codice di stato di 2xx o 3xx, ricevuto da un server Web, convalida il server come operativo.
http_get - HALB usa il metodo GET per richiedere il documento specificato dalla proprietà healthcheck_url. Questo è il metodo più lento che richiede più risorse ma è del tutto affidabile. Un codice di stato di 2xx o 3xx, ricevuto da un server Web, convalida il server come operativo. Se viene definita la proprietà lb_healthcheck_regexp, HALB scarica il documento, incluse tutte le intestazioni HTTP e il codice di stato del server, e controlla le corrispondenze con il valore lb_healthcheck_regexp. Se viene trovata una corrispondenza, il server di backend è considerato funzionale oppure viene disabilitato se non sono rilevate corrispondenze.
Predefinito: tcp_connect.

healthcheck_regexp

Stringa

Una stringa di testo usata con la modalità di healthcheck http_get. I valori abbreviati o comuni (ad esempio: "OK") potrebbero causare false corrispondenze positive. Questa stringa è un'espressione regolare di Perl. Per maggiori dettagli sulle espressioni regolari di Perl, andare qui.
Predefinito: (vuoto).

healthcheck_interval

Int

Intervallo tra gli healthcheck dei server Web di backend (specificati in secondi).
Predefinito: 20 secondi.

Proprietà di interfaccia di servizio UI/Web

name

type

description

nome utente

Stringa

Nome utente di accesso alla GUI di HALB mediante il terminale UI. Se vuoto, non c'è autenticazione.
Predefinito: (vuoto).

password

Stringa

Password per accedere alla GUI di HALB attraverso il terminale di ui. La password è ignorata se il nome utente è vuoto.
Predefinito: (vuoto).

ctl_port

Int

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

ui_port

Int

Porta usata per accedere alla GUI delle statistiche di runtime di HALB mediante il terminale UI.
Predefinito: 80

Contatori personalizzati

L'appliance di HALB riporta i seguenti contatori personalizzati dal terminale di MON.

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

Nome di contatore

Description

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.

outX_queue_max

Massimo storico di richieste in coda simultaneamente per il terminale outX.

outX_sessions_active

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.

outX_errors

Numero di healthcheck non riusciti per il terminale outX.

coda

Lunghezza di coda attuale, cumulativa per out1 - out8.

queue_max

Massimo storico di richieste in coda simultaneamente, cumulative per out1 - out8.

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.

errori

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

Prestazioni

Tasso di richiesta

HALB 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

HALB dirige non meno d 15 MByte/secondo

Connessioni concorrenti

HALB 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 HTTP non completate). Il valore massimo di connessioni concorrenti dipende dalla memoria libera disponibile e può essere di fino a 40000. HALB è 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

Description

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

HALB 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.

HALB 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.

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

Errore: healthcheck_url, quando specificato come URL, deve iniziare con http:// e contenere un percorso completo al documento (es: http://host.name.domain/file/to/check/for.html).

il valore della proprietà di healthcheck_url non è corretto: dovrebbe iniziare con 'http://' e contenere un percorso completo, es.: http://host.name.domain/file/to/check/for.html

Errore: metodo di healthcheck sconosciuto, healthcheck_method specificato.

il valore della proprietà di healthcheck_method non è corretto; dovrebbe essere uno fra tcp_connect, http_head o http_get

Errore: specificata una modalità di operazione non valida

Specificata modalità non valida, dovrebbe essere una fra passivo, sincronizzazione, inserimento od origine

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

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

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 HALB; consultare il file di log '/var/log/appliance/log' per ulteriori informazioni.

Si è verificato un errore di sistema all'avvio di HALB. 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.

Errore: impossibile inizializzare healthcheck esterno. Si prega di contattare il Supporto di CA Technologies.

Si è verificato un errore di sistema durante l'avvio dell'healthcheck esterno. Si prega di contattare il Supporto tecnico di CA Technologies.

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, considerati speciali per l'URI devono essere preceduti da un carattere di escape utilizzando la codifica standard %.

Segue una descrizione di tutti gli URL 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:

HALB 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

Description

0

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

10

L'operazione non è riuscita, la configurazione di HALB 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:

HALB 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

Description

0

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

10

L'operazione non è riuscita, la configurazione di HALB 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:

HALB 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

Description

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

Description

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 HALB.

Un esempio di output di stato:

{
   "status" :
   {
   "code": 0,
   "message": "",
   "out1": "up",
   "out2": "up",
   "out3": "down",
   "out4": "up"   
   }
}
Interfaccia utente Web

HALB espone una GUI delle statistiche attraverso il terminale UI. Vari informazioni di runtime sono disponibili attraverso l'interfaccia utente:

Parameter

Description

nbcproc

Numero di CPU disponibili per HALB.

tempo di attività

Tempo di attività di HALB.

limiti di sistema

I limiti di risorsa imposti ad HALB dal sistema operativo.

memmax

Memoria massima disponibile per HALB.

ulimit-n

Valore massimo di file aperti simultaneamente. I socket di rete sono considerati file.

maxsock

Valore massimo di socket aperti simultaneamente.

maxconn

Valore massimo di connessioni simultanee. Una volta raggiunto il valore, tutte le connessioni nuove sono messe in lista di attesa.

connessioni correnti

Numero corrente di connessioni attive.

Stato del server

Stato di un server di backend. UP - il server è funzionale, DOWN - il server non è funzionale.

Coda corrente

Lunghezza di coda della richiesta corrente del server di backend.

Coda max.

Lunghezza di coda massima del server di backend dall'avvio di HALB.

Sessioni correnti

Numero di sessioni correntemente attive.

Sessioni max.

Numero massimo raggiunto di sessioni attive simultaneamente.

Sessioni completate

Numero totale di sessioni completate.

Errori connessione

Numero di errori verificatisi alla connessione al server di backend.

Errori riportati

Numero di errori di 5xx riportati dal server di backend.

Controllo errori

Numero di controlli non riusciti per un server di backend.

Errori down

Numero di volte in cui il server di backend è passato dallo stato UP a DOWN.

Applicazioni a contenuto dinamico a bilanciamento di carico lento

Se la sua applicazione richiede che molto calcolo produca ciascuna pagina, è naturalmente capace servire un valore limitato di client contemporaneamente. Tuttavia, se l'origine di dati è abbastanza veloce o può essere replicata e servita da più server, è possibile usare HALB per aumentare il numero di connessioni da gestire simultaneamente. Un esempio tipico è servire le mappe da un database di cartografia - il database è veloce da leggere, ma ogni carico di pagina richiede che la mappa sia resa come file di immagine.

Il seguente diagramma mostra come usare HALB per impiegare più CPU nel servire lo stesso contenuto consentendo una risposta più veloce sotto un carico elevato.

Configurazione per sessioni che mantengono il server - Bugzilla

Gli esempi di configurazione mostrano soltanto le proprietà impostate su valori non predefiniti.

Proprietà

Valore

note

cookie_name

Bugzilla_logincookie

Questo è il nome usato da Bugzilla per il suo cookie di accesso

modalità

passivo

Bugzilla emette cookie unici per ciascuna combinazione di nome utente/indirizzo IP, perciò due istanze di bugzilla che sono connesse allo stesso database non restituiscono mai lo stesso cookie. Pertanto è sicuro usare la modalità passiva più semplice. Per gli altri tipi di server, l'impostazione di sincronizzazione è più appropriata.

Bilanciamento di carico permanente per i server senza sessione che usano cookie

Per i server che non hanno sessioni, ma che hanno dei dati nella cache e potrebbero beneficiare di un client diretto coerentemente allo stesso server, il monitoraggio dei cookie passivo non funziona perché non ci sono cookie da monitorare. La modalità di inserimento è usata in questo caso, come mostrato nella tabella:

Proprietà

Valore

note

cookie_name

session_id

Nome arbitrario, ma verificare che non corrisponda a un nome usato dai server per altro.

modalità

inserimento

HALB inserisce un set di cookie: intestazione

Bilanciante di carico con healthcheck di infrastruttura

Un healthcheck riuscito di un server Web di backend non garantisce che i dati restituiti siano validi o che il database da cui dipende sia ancora funzionale. Una caratteristica distintiva di HALB è la capacità di utilizzare non solo il modo convenzionale di healthcheck (connettendosi semplicemente alla porta 80 di un server Web), ma anche più metodi avanzati come http_head e http_get. L'utilizzo corretto di questa capacità garantisce non solo la disponibilità dei server di backend, ma anche dei loro server di dipendenza, database, applicazione e archiviazione. In questo esempio, sono usate due caratteristiche dell'healthcheck di HALB. Prima, viene creato un file speciale health_check.php speciale e viene specificato l'URL completo nella proprietà di healthcheck_url. Quando si accede a questo file, questo valuta la disponibilità del database, dell'applicazione o dei server NAS e restituisce un documento di stato con il testo ALL_SERVICES_ARE_OK. Questo valore è specificato nella proprietà healthcheck_regexp.

HALB controlla ogni output (out1 - out8) con le richieste HTTP/1.1 GET, usando il sito nell'host: intestazione HTTP e /health_check.php come documento URL. Questi valori sono estratti dalla proprietà di healthcheck_url (http://site/health_check.php). Nel documento, recuperato da ogni server di backend, HALB ricerca il valore di healthcheck_regexp (ALL_SERVICES_ARE_OK). Se viene trovata questa linea, il server è considerato funzionale/up; altrimenti il terminale di output è disabilitato. Se l'output è disabilitato e quindi healthcheck di HALB riesce, l'output viene nuovamente abilitato.

Se non sono usati host virtuali, o il server di backend non supporta il protocollo di HTTP/1.1, healthcheck_url può essere specificato in un modulo semplice (/health_check.php). In questo caso, HALB usa il protocollo HTTP/1.0 e non specifica host: intestazione HTTP.

Proprietà

Valore

note

healthcheck_mode

http_get

HALB usa la modalità http_get di healthcheck.

healthcheck_url

http://site/health_check.php

l'URL che HALB controlla.

healthcheck_regexp

ALL_SERVICES_ARE_OK

 

Utilizzo dei server di backup

I server di backup sono usati quando tutti i server di backend non sono disponibili e occorre fornire al client un messaggio o una pagina di reindirizzamento, invece di errori o timeout. Nell'esempio di seguito, il backup del server è configurato come server di ultimo ricorso, che serve solo una pagina statica che informa il client dell'esecuzione di una manutenzione tecnica. Quando tutti e quattro i server srv1 - srv4 sono inattivi, viene servito il contenuto di backup del server.

Proprietà

Valore

note

backup_outputs

out8

 

Utilizzo dell'interfaccia del servizio Web di controllo

L'interfaccia del servizio Web di controllo è un modo per abilitare/disabilitare in modo dinamico e programmatico i terminali di output di HALB. Può anche essere usato per recuperare lo stato corrente di tutti i terminali di output. Questa interfaccia è esposta attraverso il terminale ctl di HALB.

Il seguente diagramma mostra un ambiente a cluster con più server del database e Web. Ogni server di database e Web ha una connessione di feedback al terminale ctl di HALB. Se un server Web rileva un problema in termini di database/connettività/prestazioni, può disabilitare il terminale di output corrispondente, ordinando ad HALB di interrompere il traffico diretto al server Web. Analogamente, qualsiasi server di database può disabilitare i terminali di output di HALB, e quindi disabilitare tutto il traffico in entrata. Dopo la risoluzione del problema, i terminali di output possono essere ri-abilitati.

note

Questa appliance usa software Open Source e di terze parti

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

Software

Versione

Modificato

License

note

haproxy

1.4.9

No

GPLv2

pagina iniziale

php-thttpd

2.25b

No

BSD

N/A