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