Bij het opzetten van meerdere toepassingsservers voor redundantie, is load balancing een veelgebruikt mechanisme om inkomende serviceverzoeken of netwerkverkeer efficiënt over een groep back-end servers te verdelen.
Load balancing heeft verschillende voordelen, waaronder verhoogde beschikbaarheid van de toepassing door redundantie, verhoogde betrouwbaarheid en schaalbaarheid (er kunnen meer servers worden toegevoegd wanneer het verkeer toeneemt). Het zorgt ook voor verbeterde toepassingsprestaties en vele andere voordelen.
Aanbevolen lectuur: 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 toepassingsservers, waarbij telkens het antwoord van de geselecteerde server naar de juiste client wordt teruggestuurd.
De load balancing-methoden die worden ondersteund door Nginx zijn:
- round-robin – die verzoeken op een round-robin-manier verdeelt over de toepassingsservers. Het wordt standaard gebruikt wanneer geen methode is gespecificeerd,
- least-connected – wijst het volgende verzoek toe aan een minder drukke server (de server met het minste aantal actieve verbindingen),
- ip-hash – waarbij een hashfunctie 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 (koppel een client aan een specifieke toepassingsserver).
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 tijd, standaard is 10 seconden) als het antwoord met een fout mislukt, om te voorkomen dat die server voor volgende binnenkomende verzoeken gedurende enige tijd wordt gekozen.
Deze praktische gids laat zien hoe u Nginx kunt gebruiken als een HTTP load balancer om inkomende clientverzoeken te verdelen tussen twee servers die elk een exemplaar van dezelfde toepassing hebben.
Voor testdoeleinden is elk toepassingsexemplaar gelabeld (op de gebruikersinterface) om aan te geven op welke server het draait.
Omgeving opzetten voor testen
Load Balancer: 192.168.58.7 Application server 1: 192.168.58.5 Application server 2: 192.168.58.8
Op elke toepassingsserver is elk toepassingsexemplaar geconfigureerd om toegankelijk te zijn met behulp van het domein tecmintapp.lan
. Als dit een volledig geregistreerd domein is, zouden we het volgende toevoegen in de DNS-instellingen.
A Record @ 192.168.58.7
Deze record vertelt clientverzoeken waar het domein naartoe moet, in dit geval de load balancer (192.168.58.7). De DNS A
-records accepteren alleen IPv4-waarden. Als alternatief kan het /etc/hosts-bestand op de clientmachines ook worden gebruikt voor testdoeleinden, met de volgende invoer.
192.168.58.7 tecmintapp.lan
Nginx Load Balancing instellen in Linux
Voor het instellen van Nginx load balancing, moet je Nginx installeren op je server met behulp van de standaard pakketbeheerder voor je distributie zoals hieronder weergegeven.
$ sudo apt install nginx [On Debian/Ubuntu] $ sudo yum install nginx [On CentOS/RHEL]
Vervolgens maak je een server blokbestand genaamd /etc/nginx/conf.d/loadbalancer.conf
aan (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 load balancing methode wordt 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
directive (die gespecificeerd moet worden binnen een locatie, /
in dit geval) gebruikt om een verzoek door te sturen naar de HTTP geproxiede servers die zijn gerefereerd met het woord backend, in de upstream directive (gebruikt om een groep servers te definiëren). Ook zullen de verzoeken tussen de servers worden verdeeld met behulp van een gewogen round-robin balanceringsmechanisme.
Om het mechanisme van de minste verbindingen toe te passen, gebruik de volgende configuratie
upstream backend { least_conn; server 192.168.58.5; server 192.168.58.8; }
En om ip_hash
sessie persistentie mechanisme te activeren, gebruik:
upstream backend { ip_hash; server 192.168.58.5; server 192.168.58.8; }
Je kunt ook de load balancing beslissing beïnvloeden met behulp van server gewichten. Met de volgende configuratie, als er zes verzoeken zijn van clients, zal de applicatieserver 192.168.58.5 worden toegewezen 4 verzoeken en 2 zullen gaan naar 192.168.58.8.
upstream backend { server 192.168.58.5 weight=4; server 192.168.58.8; }
Sla het bestand op en sluit het af. Zorg er dan voor dat de Nginx configuratiestructuur correct is na het toevoegen van de recente wijzigingen, door het volgende commando uit te voeren.
$ sudo nginx -t
Als de configuratie OK is, herstart en activeer de Nginx-service om de wijzigingen toe te passen.
$ sudo systemctl restart nginx $ sudo systemctl enable nginx
Het testen van Nginx Load Balancing in Linux
Om de Nginx load balancing te testen, opent u een webbrowser en gebruikt u het volgende adres om te navigeren.
http://tecmintapp.lan
Zodra de website-interface is geladen, let op de applicatie-instantie die is geladen. Vernieuw vervolgens continu de pagina. Op een gegeven moment zou de app vanaf de tweede server geladen moeten worden, wat wijst op load balancing.

U heeft zojuist geleerd hoe u Nginx als een HTTP load balancer kunt instellen in Linux. We horen graag uw gedachten over deze handleiding, en met name over het inzetten van Nginx als een load balancer, via het feedbackformulier hieronder. Voor meer informatie, zie de Nginx-documentatie over het gebruik van Nginx als HTTP load balancer.
Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/