Zoeken op website

Hoe Nginx te gebruiken als HTTP Load Balancer in Linux


Als het gaat om het opzetten van meerdere applicatieservers voor redundantie, is taakverdeling een veelgebruikt mechanisme voor het efficiënt verdelen van binnenkomende serviceverzoeken of netwerkverkeer over een groep back-endservers.

Loadbalancing heeft verschillende voordelen, waaronder een grotere beschikbaarheid van applicaties door redundantie, grotere betrouwbaarheid en schaalbaarheid (er kunnen meer servers aan de mix worden toegevoegd als het verkeer toeneemt). Het zorgt ook voor verbeterde applicatieprestaties en vele andere voordelen.

Aanbevolen literatuur: de ultieme gids voor het beveiligen, versterken en verbeteren van de prestaties van de Nginx-webserver

Nginx kan worden ingezet als een efficiënte HTTP-load balancer om inkomend netwerkverkeer en werklast te verdelen over een groep applicatieservers, waarbij in elk geval het antwoord van de geselecteerde server wordt teruggestuurd naar de geschikte cliënt.

De methoden voor taakverdeling die door Nginx worden ondersteund, zijn:

  • round-robin – dat verzoeken op een round-robin-manier naar de applicatieservers distribueert. Het wordt standaard gebruikt als er geen methode is opgegeven,
  • minst verbonden – wijst het volgende verzoek toe aan een minder drukke server (de server met het minste aantal actieve verbindingen),
  • ip-hash – waarbij een hash-functie wordt gebruikt om te bepalen welke server moet worden geselecteerd voor het volgende verzoek op basis van het IP-adres van de client. Deze methode maakt sessiepersistentie mogelijk (een client aan een bepaalde applicatieserver koppelen).

Bovendien kunt u servergewichten gebruiken om Nginx load-balancing-algoritmen op een geavanceerder niveau te beïnvloeden. Nginx ondersteunt ook gezondheidscontroles om een server als mislukt te markeren (gedurende een configureerbare tijdsduur is de standaardwaarde 10 seconden) als de reactie mislukt met een fout, waardoor wordt voorkomen dat deze wordt gekozen server voor daaropvolgende inkomende verzoeken gedurende enige tijd.

Deze praktische gids laat zien hoe u Nginx gebruikt als een HTTP-load balancer om binnenkomende clientverzoeken te verdelen tussen twee servers die elk een exemplaar van dezelfde applicatie hebben.

Voor testdoeleinden wordt elke applicatie-instantie gelabeld (op de gebruikersinterface) om aan te geven op welke server deze draait.

Testomgeving instellen

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

Op elke applicatieserver wordt elke applicatie-instantie geconfigureerd voor toegang via het domein tecmintapp.lan. Ervan uitgaande dat dit een volledig geregistreerd domein is, zouden we het volgende toevoegen aan de DNS-instellingen.

A Record   		@   		192.168.58.7

Dit record vertelt klantverzoeken waar het domein naar moet verwijzen, in dit geval naar de load balancer (192.168.58.7). De DNS A records accepteren alleen IPv4-waarden. Als alternatief kan het bestand /etc/hosts op de clientcomputers ook worden gebruikt voor testdoeleinden, met de volgende invoer.

192.168.58.7  	tecmintapp.lan

Nginx-taakverdeling instellen in Linux

Voordat u de taakverdeling van Nginx instelt, moet u Nginx op uw server installeren met behulp van de standaard pakketbeheerder voor uw distributie, zoals weergegeven.

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

Maak vervolgens een serverblokbestand met de naam /etc/nginx/conf.d/loadbalancer.conf (geef een naam naar keuze).

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

Kopieer en plak vervolgens de volgende configuratie erin. Deze configuratie is standaard ingesteld op round-robin omdat er geen taakverdelingsmethode is gedefinieerd.

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

In de bovenstaande configuratie wordt de proxy_pass richtlijn (die moet worden gespecificeerd binnen een locatie, / in dit geval) gebruikt om een verzoek door te geven aan de HTTP-proxyservers waarnaar wordt verwezen met behulp van de word backend, in de upstream-richtlijn (gebruikt om een groep servers te definiëren). Bovendien worden de verzoeken over de servers verdeeld met behulp van een gewogen round-robin-balanceringsmechanisme.

Gebruik de volgende configuratie om het minste verbindingsmechanisme te gebruiken

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

En om het ip_hash sessiepersistentiemechanisme in te schakelen, gebruik je:

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

U kunt de beslissing over de taakverdeling ook beïnvloeden met servergewichten. Als er zes verzoeken van clients zijn, krijgt de applicatieserver 192.168.58.5 met de volgende configuratie vier verzoeken toegewezen en worden er twee 192.168.58.8 toegewezen.

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

Sla het bestand op en sluit het af. Zorg er vervolgens voor dat de Nginx-configuratiestructuur correct is na het toevoegen van de recente wijzigingen, door de volgende opdracht uit te voeren.

sudo nginx -t

Als de configuratie in orde is, start u opnieuw op en schakelt u de Nginx-service in om de wijzigingen toe te passen.

sudo systemctl restart nginx
sudo systemctl enable nginx

Nginx-loadbalancing testen onder Linux

Om de taakverdeling van Nginx te testen, opent u een webbrowser en gebruikt u het volgende adres om te navigeren.

http://tecmintapp.lan

Zodra de website-interface is geladen, noteert u de applicatie-instantie die is geladen. Vernieuw vervolgens de pagina voortdurend. Op een gegeven moment moet de app worden geladen vanaf de tweede server, wat de taakverdeling aangeeft.

Je hebt zojuist geleerd hoe je Nginx instelt als HTTP-load balancer in Linux. Via het onderstaande feedbackformulier willen we graag weten wat u van deze handleiding vindt, en vooral over het gebruik van Nginx als load balancer. Zie de Nginx-documentatie over het gebruik van Nginx als HTTP-load balancer voor meer informatie.