Load Balancing TCP e UDP con Nginx
Ultimamente avevo necessità di un bilanciatore su una infrastruttura PaaS e ho pensato ad utilizzare nginx come sistema Load Balancing TCP e UDP.
Il Load Balancing è un modo eccellente per ridimensionare l’applicazione e aumentarne le prestazioni e la ridondanza. Nginx, che è un popolare software per server Web, può essere configurato come un semplice ma potente bilanciamento del carico per migliorare la disponibilità e l’efficienza delle risorse del server. In una configurazione nginx funge da punto di ingresso singolo per un’applicazione Web (o in questo caso come un server dns) distribuita che lavora su più server separati.
Questa guida descrive come impostare il bilanciamento del carico con nginx per i server cloud. Come prerequisito, è necessario disporre di almeno due host con un software server dns (bind9) installato e configurato per vedere i vantaggi del bilanciamento del carico.
Installazione di nginx
La prima cosa da fare è impostare un nuovo host che fungerà da bilanciamento del carico. Attualmente, i pacchetti nginx sono disponibili sulle ultime versioni di CentOS, Debian e Ubuntu, quindi scegli quello che preferisci.
Dopo aver configurato il server nel modo desiderato, aggiungendo utenti, eseguendo aggiornamenti e così via, installa l’ultimo nginx stabile usando uno dei seguenti metodi.
# Debian and Ubuntu sudo apt-get update # Then install the Nginx Open Source edition sudo apt-get install nginx
# CentOS # Install the extra packages repository sudo yum install epel-release # Update the repositories and install Nginx sudo yum update sudo yum install nginx
Una volta installato, cambia la directory nella cartella di configurazione principale di nginx
cd /etc/nginx/
Verifica di poter trovare almeno la configurazione predefinita e quindi riavviare nginx.
systemctl restart nginx
Configurazione di nginx come bilanciamento del carico
Con nginx installato e testato, è possibile iniziare a configurarlo per il bilanciamento del carico. In sostanza, tutto ciò che devi fare è configurare nginx con le istruzioni per quale tipo di connessioni ascoltare e dove reindirizzarle. A tale scopo, crea un nuovo file di configurazione utilizzando qualsiasi editor di testo che preferisci, ad esempio con nano:
nano /etc/nginx/passthrough.conf
In passthrough.conf dovrai definire i seguenti due segmenti, upstream e server, vedi gli esempi seguenti.
stream { upstream dns_backends { server 192.168.63.128:53 max_fails=3 fail_timeout=10s; server 192.168.63.129:53 max_fails=3 fail_timeout=10s; } server { listen 53 udp; proxy_pass dns_backends; proxy_next_upstream on; error_log /var/log/error_dns.log; } }
assicurarsi nel file di configurazione principale di nginx di includere il file e mi raccomando all’esterno del blocco http sennò non parte.Qui sotto la porzione del file:
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } include /etc/nginx/passthrough.conf;
Rimuovere il sito di default http che a noi non server
rm /etc/nginx/sites-enabled/default
Sui sistemi centos/redhat rinominate il file
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
riavviate il servizio
systemctl restart nginx
Ora effettuando il comando host e puntando al server nginx potremmo testare l’effettivo funzionamento del bilanciamento
host -a host1.home.labs 192.168.111.129
di seguito uno screenshot del test effettuato
Fine