Sådan bruges Nginx som en HTTP-belastningsafbalancering i Linux


Når det kommer til opsætning af flere applikationsservere til redundans, er belastningsbalancering en almindeligt anvendt mekanisme til effektiv distribution af indgående serviceanmodninger eller netværkstrafik på tværs af en gruppe back-end-servere.

Load balancing har flere fordele, herunder øget tilgængelighed af applikationer gennem redundans, øget pålidelighed og skalerbarhed (flere servere kan tilføjes i blandingen, når trafikken øges). Det medfører også forbedret applikationsydelse og mange andre fordele.

Anbefalet læsning: Den ultimative guide til sikring, hærdning og forbedring af Nginx-webserverens ydeevne

Nginx kan implementeres som en effektiv HTTP-belastningsafbalancering til at distribuere indgående netværkstrafik og arbejdsbyrde blandt en gruppe applikationsservere og i begge tilfælde returnere svaret fra den valgte server til den relevante klient.

De belastningsbalanceringsmetoder, der understøttes af Nginx, er:

  • round-robin - som distribuerer anmodninger til applikationsserverne på en round-robin måde. Det bruges som standard, når der ikke er angivet nogen metode,
  • mindst tilsluttet - tildeler den næste anmodning til en mindre optaget server (serveren med mindst antal aktive forbindelser),
  • ip-hash - hvor en hash-funktion bruges til at bestemme, hvilken server der skal vælges til den næste anmodning baseret på klientens IP-adresse. Denne metode muliggør vedvarende session (knyt en klient til en bestemt applikationsserver).

Desuden kan du bruge servervægte til at påvirke Nginx-belastningsbalanceringsalgoritmer på et mere avanceret niveau. Nginx understøtter også sundhedstjek for at markere en server som mislykket (i en konfigurerbar tidsperiode er standard 10 sekunder), hvis dens svar mislykkes med en fejl, hvilket undgår at vælge denne server til efterfølgende indgående anmodninger i nogen tid.

Denne praktiske vejledning viser, hvordan du bruger Nginx som en HTTP-belastningsbalancer til at distribuere indkommende klientanmodninger mellem to servere, der hver har en forekomst af den samme applikation.

Til testformål er hver applikationsforekomst mærket (i brugergrænsefladen) for at angive den server, den kører på.

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

På hver applikationsserver er hver applikationsinstans konfigureret til at få adgang til ved hjælp af domænet tecmintapp.lan . Forudsat at dette er et fuldt registreret domæne, tilføjer vi følgende i DNS-indstillingerne.

A Record   		@   		192.168.58.7

Denne post fortæller klientanmodninger, hvor domænet skal henvise til, i dette tilfælde, belastningsbalanceren (192.168.58.7). DNS A registrerer kun IPv4-værdier. Alternativt kan filen/etc/hosts på klientmaskinerne også bruges til testformål med følgende post.

192.168.58.7  	tecmintapp.lan

Opsætning af Nginx Load Balancing i Linux

Før du konfigurerer Nginx-belastningsafbalancering, skal du installere Nginx på din server ved hjælp af standardpakkehåndteringen til din distribution som vist.

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

Opret derefter en serverblokfil kaldet /etc/nginx/conf.d/loadbalancer.conf (angiv et navn efter eget valg).

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

Kopier og indsæt derefter følgende konfiguration i den. Denne konfiguration er som standard round-robin, da der ikke er defineret nogen belastningsafbalanceringsmetode.

 
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;
	}
}

I ovenstående konfiguration bruges proxy_pass -direktivet (som i dette tilfælde skal specificeres inde i en placering, /) til at sende en anmodning til de HTTP-proxiserede servere, der er refereret til ved hjælp af word backend, i upstream-direktivet (bruges til at definere en gruppe servere). Anmodningerne distribueres også mellem serverne ved hjælp af en vægtet round-robin-afbalanceringsmekanisme.

Brug følgende konfiguration for at anvende den mindste forbindelsesmekanisme

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

Og for at aktivere ip_hash session persistens mekanisme, brug:

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

Du kan også påvirke belastningsbalanceringsbeslutningen ved hjælp af servervægte. Ved hjælp af følgende konfiguration, hvis der er seks anmodninger fra klienter, tildeles applikationsserveren 192.168.58.5 4 anmodninger og 2 går 192.168.58.8.

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

Gem filen, og afslut den. Sørg derefter for, at Nginx-konfigurationsstrukturen er korrekt efter tilføjelse af de seneste ændringer ved at køre følgende kommando.

$ sudo nginx -t

Hvis konfigurationen er OK, skal du genstarte og aktivere Nginx-tjenesten for at anvende ændringerne.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

Test af Nginx Load Balancing i Linux

For at teste Nginx-belastningsbalancering skal du åbne en webbrowser og bruge følgende adresse til at navigere.

http://tecmintapp.lan

Når webstedets interface er indlæst, skal du notere den applikationsinstans, der er indlæst. Opdater derefter siden kontinuerligt. På et tidspunkt skal appen indlæses fra den anden server, der angiver belastningsbalancering.

Du har lige lært, hvordan du konfigurerer Nginx som en HTTP-belastningsbalancer i Linux. Vi vil gerne vide dine tanker om denne guide og især om at bruge Nginx som en belastningsafbalancering via feedbackformularen nedenfor. For flere oplysninger, se Nginx-dokumentationen om brug af Nginx som en HTTP-belastningsafbalancering.