
Bilanciamento del Carico con HAProxy
HAProxy è uno strumento software gratuito che funziona come bilanciatore di carico e server reverse-proxy per applicazioni basate su TCP e HTTP. Lo strumento distribuisce le richieste di connessione tra più nodi server. Con un uso molto limitato delle risorse, consente di gestire enormi volumi di traffico HTTP e HTTPS. Inoltre, HAProxy esegue controlli di salute del server e instrada gli utenti verso un nodo funzionante nel caso in cui uno dei server sia inattivo, rendendolo una soluzione efficace per il failover.
Assumendo i summenzionati vantaggi, abbiamo configurato HAProxy per distribuire connessioni per MySQL RDBMS e la nostra interfaccia utente.
In questo articolo, considereremo i passaggi per eseguire il bilanciamento del carico per tre Proxy di DataSunrise in Modalità Alta Disponibilità ai seguenti indirizzi: 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 il modo di 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 attuale di DataSunrise: nome del server, nome host dove è installata l’istanza di DataSunrise, numero di porta della web UI dell’istanza (11000, per impostazione predefinita).
- Nella scheda Posizione del Dizionario, specificare il database in cui archiviare 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 web UI).
Consultare la Guida all’Amministrazione di DataSunrise per istruzioni più dettagliate sulla modalità di alta disponibilità di DataSunrise. Assicurarsi anche che la stessa versione del prodotto sia installata su tutti i server.
Crea Istanza
Successivamente, dobbiamo creare un’istanza di DataSunrise sull’host virtuale dove MySQL è installato e aprire i proxy sulle macchine che si connetteranno al database MySQL.
Per creare un’istanza, eseguire quanto segue sulla macchina principale:
- Accedere al GUI di DataSunrise e andare alla sottosezione Database della sezione Configurazioni.
- Cliccare sul pulsante Database +.
- Inserire il nome host, il numero di porta e le altre informazioni richieste.
- Una volta creata l’istanza, selezionare la nuova istanza creata dall’elenco e cliccare su Modifica.
- Si aprirà una finestra con le configurazioni dell’istanza, cliccare sul pulsante Proxy +.
- Specificare il server, il nome host e il numero di porta (mysql0, 192.168.1.100, 3306 rispettivamente) e cliccare su Salva.
- Aprire i proxy sulle macchine slave nella stessa istanza specificando il corrispondente nome del server e nome host per ciascun proxy.
Alla fine, la configurazione dell’istanza apparirà così:

Configurazione di HAProxy per MySQL
La configurazione di HAProxy per i sistemi di gestione database è abbastanza semplice. Di seguito configureremo HAProxy per funzionare come distributore di connessioni per i Proxy di 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à controlli di salute e distribuirà le connessioni in base al numero di connessioni sul nodo server, indirizzando l’utente al server con il minor numero di connessioni.
balance <algoritmo> è per la selezione degli algoritmi di bilanciamento.
roundrobin | Round Robin è l’algoritmo predefinito, seleziona i server a turno. |
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.
Nel caso il server attualmente utilizzato da un utente sia giù, la connessione sarà chiusa. L’utente dovrà riconnettersi e HAProxy aprirà una nuova connessione al database al server che è attivo e ha il minor numero di connessioni.

Tutti gli altri sistemi di gestione database possono essere configurati allo stesso modo, è solo necessario cambiare le porte.
Configurazione di HAProxy come bilanciatore di carico per il servizio backend di DataSunrise (GUI)
In questa sezione, considereremo i passaggi per eseguire il bilanciamento del carico per tre Proxy di DataSunrise in Modalità Alta Disponibilità ai seguenti indirizzi: 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
Scomposizione della Configurazione
Tempo di Inattività dell’Utente
timeout client <timeout> – impostare il periodo massimo di inattività dell’utente dopo il quale la connessione verrà chiusa (millisecondi).
timeout server <timeout> – impostare il periodo massimo di inattività del server dopo il quale la connessione verrà chiusa (millisecondi).
Protocollo dell’Istanze
mode { tcp|http } – definisce il protocollo dell’istanza. Nel nostro caso, il bilanciamento verrà eseguito a livello del protocollo HTTP. Prima di connettersi a qualsiasi server, la richiesta del client verrà analizzata in profondità. Qualsiasi richiesta che non sia conforme all’RFC verrà rifiutata. Sarà possibile il filtraggio, l’elaborazione e lo switching di Livello 7.
HAProxy può bilanciare anche a livello TCP, ma le specificità delle applicazioni web con una sessione utente condizionata rendono difficile eseguire un corretto bilanciamento del carico senza la possibilità di analizzare o modificare alcune parti delle query HTTP. Utilizziamo la modalità http perché abbiamo bisogno che HAProxy assegnai e legga il cookie di persistenza che permetterà ad HAProxy di determinare il server a cui l’utente deve essere indirizzato. Così, il web-server funzionerà correttamente con la sessione utente.
Indirizzo e Porta di Ascolto
bind [<address>]:<port_range> – l’opzione bind definisce uno o diversi indirizzi e porte di ascolto in un frontend. <address> può essere un nome host, indirizzo IPv4, 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 i key verranno presi dal file /home/anon/proxy.pem. Gli utenti del sistema devono avere accesso in lettura al file.
Il contenuto del file pem dovrebbe essere nel seguente formato:
-----BEGIN CERTIFICATE----- HLDXjCDSAkY... -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- HLDEpgIBDSKC.... -----END RSA PRIVATE KEY-----
Inoltro
redirect scheme https if !{ ssl_fc } la seguente configurazione inoltra tutte le connessioni HTTP in testo semplice sulla porta 11000 allo schema HTTPS. Pertanto, gli utenti non saranno in grado di 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 il cookie all’utente. Secondo il valore del cookie HAProxy determinerà quale nodo server deve essere utilizzato per le successive query dell’utente.
HA_BACKEND_ID è il nome del cookie.
L’opzione insert definisce che HAProxy assegnerà quei valori di cookie dopo la prima query. Il valore del cookie persistente viene utilizzato fino a quando l’utente non 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 nei 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]. Di default, 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 controlla se il nodo è disponibile.
cookie <value> – il parametro imposta il valore del cookie assegnato al server.
Salvare le modifiche di configurazione e riavviare HAProxy.
Conclusione
Di conseguenza, 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 inoltra l’utente al nodo server con il minor carico, il che effettivamente bilancia il carico.
HAProxy funziona su Linux e Solaris. Per il sistema operativo Windows prova la soluzione più avanzata Nginx.
Se hai bisogno di assistenza durante la configurazione di HAProxy o DataSunrise in modalità di alta disponibilità, non esitare a contattarci. I nostri ingegneri di supporto ti aiuteranno.