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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Debian and Ubuntu
sudo apt-get update
# Then install the Nginx Open Source edition
sudo apt-get install nginx
# Debian and Ubuntu sudo apt-get update # Then install the Nginx Open Source edition sudo apt-get install nginx
# Debian and Ubuntu
sudo apt-get update
# Then install the Nginx Open Source edition
sudo apt-get install nginx
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# CentOS
# Install the extra packages repository
sudo yum install epel-release
# Update the repositories and install Nginx
sudo yum update
sudo yum 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
# 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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd /etc/nginx/
cd /etc/nginx/
cd /etc/nginx/

Verifica di poter trovare almeno la configurazione predefinita e quindi riavviare nginx.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
systemctl restart nginx
systemctl restart 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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano /etc/nginx/passthrough.conf
nano /etc/nginx/passthrough.conf
nano /etc/nginx/passthrough.conf

In passthrough.conf dovrai definire i seguenti due segmenti, upstream e server, vedi gli esempi seguenti.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
include /etc/nginx/passthrough.conf;
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } include /etc/nginx/passthrough.conf;
        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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-enabled/default

Sui sistemi centos/redhat rinominate il file

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled

riavviate il servizio

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
systemctl restart nginx
systemctl restart nginx
systemctl restart nginx

Ora effettuando il comando host e puntando al server nginx potremmo testare l’effettivo funzionamento del bilanciamento

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
host -a host1.home.labs 192.168.111.129
host -a host1.home.labs 192.168.111.129
host -a host1.home.labs 192.168.111.129

di seguito uno screenshot del test effettuato

Fine

 

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.