1.3. Panoramica programmazione di Load Balancer Add-On
Uno dei vantaggi dell'uso di un Load Balancer Add-On è la sua abilità di eseguire un bilanciamento del carico a livello IP molto flessibile nel pool di real server. Questa flessibilità è resa possibile a causa dell'utilizzo di una varietà di algoritmi di programmazione disponibile per un amministratore, durante la configurazione di un Load Balancer Add-On. Il bilanciamento del carico con un Load Balancer Add-On, risulta superiore rispetto ad altri metodi meno flessibili, come ad esempio Round-Robin DNS dove la natura gerarchica di DNS ed il caching delle macchine client può causare uno squilibrio del carico. Altresì, un livello basso di filtraggio implementato da un router LVS, presenta alcuni vantaggi rispetto all'inoltro delle richieste a livello dell'applicazione, poichè il bilanciamento dei carichi ad un livello del pacchetto di rete può causare livelli minimi di overhead di calcolo, rendendo disponibile una maggiore scalabilità.
Usando una programmazione (scheduling), il router attivo è in grado di considerare l'attività del server, e facoltativamente, il peso assegnato da un amministratore durante l'instradamento delle richieste di servizio. L'uso del peso fornisce una priorità arbitraria alle macchine individuali. Con l'uso di questo tipo di programmazione sarà possibile creare un gruppo di real server usando una varietà di combinazioni hardware e software, e il router attivo è in grado di assegnare in modo omogeneo il carico ad ogni real server.
Il meccanismo di programmazione per il Load Balancer Add-On viene reso disponibile tramite una raccolta di patch del kernel chiamata IP Virtual Server o IPVS. I suddetti moduli abilitano un livello di trasporto layer 4 (L4), ideato per operare con server multipli su un indirizzo IP singolo.
Per controllare e indirizzare i pacchetti sui real server in modo efficiente IPVS compila una tabella IPVS nel kernel. Questa tabella viene utilizzata dal router LVS attivo per instradare le richieste da un indirizzo del server virtuale per, e da, real server presenti nel pool. La tabella IPVS viene costantemente aggiornata dall'utilità ipvsadm — aggiungendo o rimuovendo i membri del cluster in base alla loro disponibilità.
1.3.1. Algoritmi di programmazione
La struttura di una tabella IPVS dipende dall'algoritmo di programmazione scelto dall'amministratore per un dato server virtuale. Per una flessibilità massima nei tipi di servizi desiderati e sul metodo di programmazione, Red Hat Enterprise Linux rende disponibile qui di seguito i seguenti algoritmi. Per informazioni su come assegnare gli algoritmi di programmazione consultare la Sezione 4.6.1, «Sottosezione SERVER VIRTUALE».
- Programmazione Round-Robin
- Distribuisce ogni richiesta in modo sequenziale a tutti i real server presenti nel pool. Usando questo algoritmo tutti i real server verranno considerati allo stesso livello senza considerare la capacità o il carico. Questo modello di programmazione somiglia molto al round-robin DNS, ma differisce da quest'ultimo perchè risulta essere più granulare in quanto si basa sul collegamento di rete e non sull'host. Questo tipo di programmazione round-robin non soffre di eventuali squilibri causati da richieste DNS in cache.
- Programmazione Weighted Round-Robin
- Distribuisce ogni richiesta in successione all'interno di un gruppo di real server, dando un carico di lavoro maggiore ai server con maggiore capacità. La capacità viene indicata da un fattore di peso assegnato dall'utente, e viene modificata in base alle informazioni sul carico dinamico. A tal proposito consultare Sezione 1.3.2, «Peso del server e programmazione (scheduling)» per maggiori informazioni.La programmazione Weighted round-robin rappresenta la scelta preferita se sono presenti differenze sostanziali di capacità dei real server all'interno di un gruppo. Tuttavia se la richiesta di carico varia sensibilmente, un server con un carico di lavoro molto elevato potrebbe operare oltre ai propri limiti.
- Least-Connection
- Distribuisce un numero maggiore di richieste ai real server con un numero minore di collegamenti attivi. Poichè questo tipo di algoritmo controlla i collegamenti per i real server attraverso la tabella IPVS, esso è un tipo di algoritmo dinamico e rappresenta la scelta migliore se siete in presenza di una elevata variazione nelle richieste di carico. Offre il meglio di se per un gruppo di real server dove ogni nodo presenta una capacità simile. Se in presenza di un gruppo di server con diverse capacità, allora la programmazione di tipo weighted least-connection rappresenta la scelta migliore.
- Weighted Least-Connections (default)
- Distribuisce un numero maggiore di richieste ai server con un numero minore di collegamenti attivi in base alle rispettive capacità. La capacità viene indicata da un peso assegnato dall'utente, e può essere modificata in base alle informazioni relative al carico dinamico. L'aggiunta di peso rende questo algoritmo ideale quando il gruppo di real server contiene un hardware di varia capacità. Per maggiori informazioni consultare Sezione 1.3.2, «Peso del server e programmazione (scheduling)».
- Programmazione Locality-Based Least-Connection
- Distribuisce un numero maggiore di richieste ai server con un numero minore di collegamenti attivi, in base ai rispettivi IP di destinazione. Questo algoritmo può essere utilizzato in un cluster di server proxy-cache. Usato per indirizzare i pacchetti di un indirizzo IP al server per l'indirizzo stesso, a meno che il server non abbia superato la sua capacità e non sia presente un server che utilizzi metà della propria capacità. In tal caso l'indirizzo IP verrà assegnato al real server con un carico minore.
- Programmazione Locality-Based Least-Connection con Programmazione della replica
- Distribuisce un numero maggiore di richieste ai server con un numero minore di collegamenti attivi in base ai propri IP di destinazione. Questo algoritmo viene usato anche in un cluster di server proxy-cache. Esso differisce dalla Programmazione di tipo Locality-Based Least-Connection a causa della mappatura dell'indirizzo IP di destinazione su di un sottoinsieme di nodi del real server. Le richieste vengono indirizzate ad un server presente in questo sottoinsieme con il numero più basso di collegamenti. Se tutti i nodi per l'IP di destinazione hanno superato la propria capacità, esso sarà in grado di replicare un nuovo server per l'indirizzo IP in questione, aggiungendo il real server con un numero minore di collegamenti al sottoinsieme di real server dell'IP interessato. Il nodo con più carico carico verrà rilasciato dal sottoinsieme di real server in modo da evitare un processo di riproduzione non corretto.
- Programmazione Destination Hash
- Distribuisce le richieste al gruppo di real server cercando l'IP sorgente in una tabella hash statica. È possibile usare questo algoritmo in un cluster di server proxy-cache.
- Programmazione Source Hash
- Distribuisce le richieste al gruppo di real server, cercando l'IP sorgente in una tabella hash statica. È possibile utilizzare questo algoritmo con i router LVS con firewall multipli.