Com utilitzar Nginx com a equilibrador de càrrega HTTP a Linux


Quan es tracta de configurar diversos servidors d'aplicacions per a la redundància, l'equilibri de càrrega és un mecanisme d'ús habitual per distribuir de manera eficient les sol·licituds de servei entrants o el trànsit de xarxa entre un grup de servidors de fons.

L'equilibri de càrrega té diversos avantatges, com ara una major disponibilitat d'aplicacions mitjançant la redundància, una major fiabilitat i escalabilitat (es poden afegir més servidors a la combinació quan augmenta el trànsit). També aporta un millor rendiment de l'aplicació i molts altres avantatges.

Lectura recomanada: La guia definitiva per assegurar, endurir i millorar el rendiment del servidor web Nginx

Nginx es pot implementar com un equilibrador de càrrega HTTP eficient per distribuir el trànsit de xarxa entrant i la càrrega de treball entre un grup de servidors d'aplicacions, retornant en cada cas la resposta del servidor seleccionat al client adequat.

Els mètodes d'equilibri de càrrega admesos per Nginx són:

  • round-robin: distribueix sol·licituds als servidors d'aplicacions de manera round-robin. S'utilitza per defecte quan no s'especifica cap mètode,
  • menys connectat: assigna la següent sol·licitud a un servidor menys ocupat (el servidor amb el menor nombre de connexions actives),
  • ip-hash: s'utilitza una funció hash per determinar quin servidor s'ha de seleccionar per a la següent sol·licitud en funció de l'adreça IP del client. Aquest mètode permet la persistència de la sessió (lligar un client a un servidor d'aplicacions concret).

A més, podeu utilitzar els pesos del servidor per influir en els algorismes d'equilibri de càrrega de Nginx a un nivell més avançat. Nginx també admet comprovacions de salut per marcar un servidor com a fallat (durant un període de temps configurable, el valor predeterminat és de 10 segons) si la seva resposta falla amb un error, per tant evita escollir aquest servidor per a les sol·licituds entrants posteriors durant algun temps.

Aquesta guia pràctica mostra com utilitzar Nginx com a equilibrador de càrrega HTTP per distribuir les sol·licituds de clients entrants entre dos servidors que tenen cadascun una instància de la mateixa aplicació.

Amb finalitats de prova, cada instància d'aplicació s'etiqueta (a la interfície d'usuari) per indicar el servidor on s'està executant.

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

A cada servidor d'aplicacions, cada instància d'aplicació està configurada per accedir-hi mitjançant el domini tecmintapp.lan. Suposant que es tracta d'un domini totalment registrat, afegiríem el següent a la configuració de DNS.

A Record   		@   		192.168.58.7

Aquest registre indica a les sol·licituds dels clients on ha de dirigir el domini, en aquest cas, a l'equilibrador de càrrega (192.168.58.7). Els registres DNS A només accepten valors IPv4. Alternativament, el fitxer /etc/hosts de les màquines client també es pot utilitzar amb finalitats de prova, amb l'entrada següent.

192.168.58.7  	tecmintapp.lan

Configuració de l'equilibri de càrrega de Nginx a Linux

Abans de configurar l'equilibri de càrrega de Nginx, heu d'instal·lar Nginx al vostre servidor mitjançant el gestor de paquets predeterminat per a la vostra distribució, tal com es mostra.

$ sudo apt install nginx   [On Debian/Ubuntu]
$ sudo yum install nginx   [On CentOS/RHEL]   

A continuació, creeu un fitxer de bloc de servidor anomenat /etc/nginx/conf.d/loadbalancer.conf (doneu el nom que vulgueu).

$ sudo vi /etc/nginx/conf.d/loadbalancer.conf

A continuació, copieu i enganxeu-hi la configuració següent. Aquesta configuració per defecte és round-robin, ja que no es defineix cap mètode d'equilibri de càrrega.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

A la configuració anterior, la directiva proxy_pass (que s'hauria d'especificar dins d'una ubicació, / en aquest cas) s'utilitza per passar una sol·licitud als servidors proxy HTTP als quals es fa referència mitjançant el word backend, a la directiva upstream (utilitzat per definir un grup de servidors). A més, les sol·licituds es distribuiran entre els servidors mitjançant un mecanisme d'equilibri ponderat.

Per utilitzar el mecanisme de connexió mínima, utilitzeu la configuració següent

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

I per habilitar el mecanisme de persistència de la sessió ip_hash, utilitzeu:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

També podeu influir en la decisió d'equilibri de càrrega utilitzant els pesos del servidor. Amb la configuració següent, si hi ha sis peticions de clients, al servidor d'aplicacions 192.168.58.5 se li assignaran 4 peticions i 2 passaran a 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Deseu el fitxer i sortiu-ne. A continuació, assegureu-vos que l'estructura de configuració de Nginx sigui correcta després d'afegir els canvis recents, executant l'ordre següent.

$ sudo nginx -t

Si la configuració està bé, reinicieu i activeu el servei Nginx per aplicar els canvis.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

Prova de l'equilibri de càrrega de Nginx a Linux

Per provar l'equilibri de càrrega de Nginx, obriu un navegador web i utilitzeu l'adreça següent per navegar.

http://tecmintapp.lan

Un cop es carregui la interfície del lloc web, tingueu en compte la instància de l'aplicació que s'ha carregat. A continuació, actualitzeu la pàgina contínuament. En algun moment, l'aplicació s'hauria de carregar des del segon servidor indicant l'equilibri de càrrega.

Acabeu d'aprendre a configurar Nginx com a equilibrador de càrrega HTTP a Linux. Ens agradaria conèixer els vostres pensaments sobre aquesta guia, i especialment sobre l'ús de Nginx com a equilibrador de càrrega, a través del formulari de comentaris següent. Per obtenir més informació, consulteu la documentació de Nginx sobre l'ús de Nginx com a equilibrador de càrrega HTTP.