Bilanciamento del Carico con HAProxy
HAProxy è uno strumento software gratuito che funziona come un bilanciatore del carico e server reverse-proxy per applicazioni basate su TCP e HTTP. Lo strumento distribuisce le richieste di connessione su vari nodi server. Con un utilizzo minimo delle risorse, consente di gestire grandi volumi di traffico HTTP e HTTPS. Inoltre, HAProxy esegue controlli sulla salute dei server e indirizza gli utenti ai nodi funzionanti in caso di guasto di uno dei server, rendendolo una soluzione utile per il failover.
Considerando i suddetti vantaggi, abbiamo configurato HAProxy per distribuire le connessioni per MySQL RDBMS e la nostra interfaccia utente.
In questo articolo, considereremo i passaggi per eseguire il bilanciamento del carico per tre proxy DataSunrise in modalità ad Alta Disponibilità agli indirizzi seguenti: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Prerequisiti
Ci sono diversi passaggi da eseguire prima di iniziare a lavorare con HAProxy.
Prima di configurare il bilanciamento del carico, è necessario installare DataSunrise in modalità alta disponibilità su diversi server. Per implementare la modalità alta disponibilità su DataSunrise, eseguire quanto segue:
- La procedura guidata di installazione di DataSunrise consente di selezionare la posizione locale o remota per una scheda di configurazione. Selezionare Remoto.
- Nella scheda Dettagli del Server DataSunrise, specificare i dettagli dell’istanza corrente di DataSunrise: nome del server, nome host in cui è installata l’istanza DataSunrise, numero di porta dell’interfaccia web dell’istanza (11000, di default).
- Nella scheda Posizione del Dizionario, specificare il database per memorizzare la configurazione di DataSunrise (Dizionario). Tutti i server configurati per utilizzare questo database condivideranno le stesse impostazioni di configurazione (inclusi credenziali comuni per accedere alle interfacce web).
Fare riferimento alla Guida all’Amministrazione di DataSunrise per istruzioni più dettagliate sulla modalità alta disponibilità di DataSunrise. Assicurarsi inoltre che la stessa versione del prodotto sia installata su tutti i server.
Creare Istanza
Successivamente, dobbiamo creare un’istanza DataSunrise sull’host virtuale in cui è installato MySQL e aprire proxy sulle macchine che si connetteranno al database MySQL.
Per creare un’istanza, eseguire quanto segue sulla macchina principale:
- Accedere all’interfaccia grafica di DataSunrise e andare alla sottosezione Database della sezione Configurazioni.
- Fare clic sul pulsante Database +.
- Inserire il nome host, il numero di porta e altre informazioni richieste.
- Una volta creata l’istanza, selezionare la nuova istanza creata dall’elenco e fare clic su Modifica.
- Si aprirà una finestra con le configurazioni dell’istanza. Fare clic sul pulsante Proxy +.
- Specificare il server, il nome host e il numero di porta (mysql0, 192.168.1.100, 3306 rispettivamente) e fare clic su Salva.
- Aprire i proxy sulle macchine slave sulla stessa istanza specificando il nome del server corrispondente e il nome host per ciascun proxy.
Alla fine, la configurazione dell’istanza apparirà così:
Configurare HAProxy per MySQL
Configurare HAProxy per i sistemi di gestione del database è abbastanza semplice. Di seguito configureremo HAProxy per funzionare come distributore di connessioni per i proxy DataSunrise (192.168.1.100:3306, 192.101.1.101:3306, 192.168.1.102:3306).
Dopo aver installato HAProxy, aprire il file menzionato sopra /etc/haproxy/haproxy.cfg e modificare il blocco di configurazione ‘listen’ come segue:
listen af_mysql_balancer
mode tcp
bind *:3306
balance leastconn
server mysql0 192.168.1.100:3306 check
server mysql1 192.168.1.101:3306 check
server mysql2 192.168.1.102:3306 check
HAProxy eseguirà i controlli della salute e distribuirà le connessioni secondo il numero di connessioni sul nodo server, reindirizzando l’utente al server con il minor numero di connessioni.
balance <algorithm> serve a selezionare gli algoritmi di bilanciamento.
roundrobin | Round Robin è l’algoritmo predefinito, seleziona i server a turni. |
leastconn | Con questo algoritmo, HAProxy indirizza ogni nuovo utente al server con il minor numero di connessioni. |
source | L’algoritmo per indirizzare gli utenti ai server basato su un hash dell’indirizzo IP dell’utente. |
Per l’elenco completo degli algoritmi di bilanciamento fare riferimento al Manuale di Configurazione di HAProxy.
In caso di inattività del server attualmente utilizzato da un utente, la connessione verrà chiusa. L’utente dovrà riconnettersi e HAProxy aprirà una nuova connessione al database sul server che è operativo e che ha il minor numero di connessioni.
Tutti gli altri sistemi di gestione del database possono essere configurati nello stesso modo, è necessario solo cambiare le porte.
Configurare HAProxy come bilanciatore di carico per il servizio di backend di DataSunrise (GUI)
In questa sezione, considereremo i passaggi per eseguire il bilanciamento del carico per tre proxy DataSunrise in modalità Alta Disponibilità agli indirizzi seguenti: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Installare HAProxy su un server separato e aprire /etc/haproxy/haproxy.cfg con qualsiasi editor di testo. Specificare la configurazione del listener nel modo seguente:
listen af_gui_balancer
timeout client 50000
timeout server 50000
mode http
bind *:11000 ssl crt /home/anon/proxy.pem
redirect scheme https if !{ ssl_fc }
cookie HA_BACKEND_ID insert
balance leastconn
server node0 192.168.1.100:11000 ssl verify none check cookie 0
server node1 192.168.1.101:11000 ssl verify none check cookie 1
server node2 192.168.1.102:11000 ssl verify none check cookie 2
Analisi della Configurazione
Tempo di Inattività dell’Utente
timeout client <timeout> – imposta il tempo massimo di inattività dell’utente dopo il quale la connessione verrà chiusa (millisecondi).
timeout server <timeout> – imposta il tempo massimo di inattività del server dopo il quale la connessione verrà chiusa (millisecondi).
Protocollo dell’Istance
mode { tcp|http } – definisce il protocollo dell’istanza. Nel nostro caso, il bilanciamento del carico verrà eseguito a livello di protocollo HTTP. La richiesta del client verrà analizzata in profondità prima di connettersi a qualsiasi server. Qualsiasi richiesta non conforme a RFC verrà respinta. Sarà possibile il filtraggio, l’elaborazione e lo switching di livello 7.
HAProxy può bilanciare anche a livello TCP, ma le specifiche delle applicazioni web che richiedono sessioni utente rendono difficile eseguire un bilanciamento del carico corretto senza la possibilità di analizzare o modificare alcune parti delle query HTTP. Usiamo il modo HTTP perché abbiamo bisogno che HAProxy assegni e legga un cookie persistente che consentirà a HAProxy di determinare il server a cui l’utente deve essere indirizzato. Pertanto, il server web funzionerà correttamente con la sessione dell’utente.
Indirizzo e Porta di Ascolto
bind [<address>]:<port_range> – l’opzione bind definisce uno o più indirizzi di ascolto e porte in un frontend. <address> può essere un nome host, un indirizzo IPv4, un indirizzo IPv6 o ‘*’. ‘*’ significa che la porta sarà aperta in tutti gli indirizzi IP disponibili.
ssl crt /home/anon/proxy.pem – L’opzione ssl abilita la decifratura SSL che richiede certificati. I certificati e le chiavi verranno presi dal file /home/anon/proxy.pem. Gli utenti di sistema devono avere accesso in lettura al file.
Il contenuto del file pem dovrebbe essere nel formato seguente:
-----BEGIN CERTIFICATE----- HLDXjCDSAkY... -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- HLDEpgIBDSKC.... -----END RSA PRIVATE KEY-----
Reindirizzamento
redirect scheme https if !{ ssl_fc } la seguente configurazione reindirizza tutte le connessioni HTTP in chiaro sulla porta 11000 allo schema HTTPS. Pertanto, gli utenti non potranno utilizzare il servizio di amministrazione senza crittografia.
Cookie Persistente
cookie HA_BACKEND_ID insert. L’opzione data definisce il cookie persistente. Dopo la prima richiesta, HAProxy invia un cookie all’utente. In base al valore del cookie, HAProxy determinerà quale nodo server deve essere utilizzato per le query successive dell’utente.
HA_BACKEND_ID è il nome del cookie.
L’opzione insert definisce che HAProxy assegnerà tali valori di cookie dopo la prima query. Il valore del cookie persistente viene utilizzato fino a quando l’utente cancella i cookie del browser o termina la sessione.
Le ultime tre righe definiscono le istanze.
node0 è un nome arbitrario dell’istanza utilizzato solo per l’identificazione in termini di HAProxy.
192.168.1.100:11000 – l’indirizzo e la porta dell’istanza.
ssl – definisce che l’istanza accetta connessioni https.
verify [none | optional | required]. Per impostazione predefinita, l’impostazione è impostata su none, il che significa che il certificato SSL inviato dal server non verrà verificato, ovvero HAProxy si fiderà del certificato del servizio backend di DataSunrise.
L’opzione check abilita il meccanismo di controllo della salute. Prima di inoltrare la query del client al nodo, HAProxy verifica se il nodo è disponibile.
cookie <value> – il parametro imposta il valore del cookie assegnato al server.
Salvare le modifiche alla configurazione e rilanciare HAProxy.
Conclusione
Come risultato, avremo la configurazione che permette ad HAProxy di funzionare come segue:
- Un utente si connette a HAProxy.
- HAProxy esegue il controllo della salute dei server.
- HAProxy reindirizza l’utente al nodo server con il minor carico, bilanciando così effettivamente il carico.
HAProxy opera su Linux e Solaris. Per il sistema operativo Windows, provare la soluzione più avanzata Nginx.
Se hai bisogno di assistenza durante la configurazione di HAProxy o DataSunrise in modalità alta disponibilità, non esitare a contattarci. I nostri ingegneri di supporto ti aiuteranno.