Website-Suche

So verwenden Sie Nginx als HTTP-Load-Balancer unter Linux


Wenn es darum geht, mehrere Anwendungsserver für Redundanz einzurichten, ist der Lastausgleich ein häufig verwendeter Mechanismus zur effizienten Verteilung eingehender Serviceanfragen oder Netzwerkdatenverkehr auf eine Gruppe von Back-End-Servern.

Der Lastausgleich bietet mehrere Vorteile, darunter eine erhöhte Anwendungsverfügbarkeit durch Redundanz, erhöhte Zuverlässigkeit und Skalierbarkeit (bei steigendem Datenverkehr können dem Mix weitere Server hinzugefügt werden). Es führt außerdem zu einer verbesserten Anwendungsleistung und vielen anderen Vorteilen.

Empfohlene Lektüre: Der ultimative Leitfaden zum Sichern, Härten und Verbessern der Leistung des Nginx-Webservers

Nginx kann als effizienter HTTP-Load-Balancer eingesetzt werden, um eingehenden Netzwerkverkehr und Arbeitslast auf eine Gruppe von Anwendungsservern zu verteilen und jeweils die Antwort vom ausgewählten Server an den Server zurückzugeben entsprechenden Kunden.

Die von Nginx unterstützten Lastausgleichsmethoden sind:

  • Round-Robin – verteilt Anfragen im Round-Robin-Verfahren an die Anwendungsserver. Es wird standardmäßig verwendet, wenn keine Methode angegeben ist.
  • am wenigsten verbunden – weist die nächste Anfrage einem weniger ausgelasteten Server zu (dem Server mit der geringsten Anzahl aktiver Verbindungen),
  • ip-hash – wobei eine Hash-Funktion verwendet wird, um anhand der IP-Adresse des Clients zu bestimmen, welcher Server für die nächste Anfrage ausgewählt werden soll. Diese Methode ermöglicht Sitzungspersistenz (binden Sie einen Client an einen bestimmten Anwendungsserver).

Darüber hinaus können Sie Servergewichtungen verwenden, um Nginx-Lastausgleichsalgorithmen auf einer fortgeschritteneren Ebene zu beeinflussen. Nginx unterstützt auch Gesundheitsprüfungen, um einen Server als ausgefallen zu markieren (für einen konfigurierbaren Zeitraum, Standard ist 10 Sekunden), wenn seine Antwort mit einem Fehler fehlschlägt, und vermeidet so die Auswahl Server für einige Zeit für später eingehende Anfragen.

Dieser praktische Leitfaden zeigt, wie Sie Nginx als HTTP-Load-Balancer verwenden, um eingehende Client-Anfragen zwischen zwei Servern zu verteilen, die jeweils über eine Instanz derselben Anwendung verfügen.

Zu Testzwecken ist jede Anwendungsinstanz (auf der Benutzeroberfläche) beschriftet, um anzugeben, auf welchem Server sie ausgeführt wird.

Einrichtung der Testumgebung

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

Auf jedem Anwendungsserver ist jede Anwendungsinstanz für den Zugriff über die Domäne tecmintapp.lan konfiguriert. Unter der Annahme, dass es sich um eine vollständig registrierte Domain handelt, würden wir Folgendes in den DNS-Einstellungen hinzufügen.

A Record   		@   		192.168.58.7

Dieser Datensatz teilt Clientanfragen mit, wohin die Domäne weitergeleitet werden soll, in diesem Fall an den Load Balancer (192.168.58.7). Die DNS-A-Einträge akzeptieren nur IPv4-Werte. Alternativ kann zu Testzwecken auch die Datei /etc/hosts auf den Client-Rechnern mit dem folgenden Eintrag verwendet werden.

192.168.58.7  	tecmintapp.lan

Einrichten des Nginx-Lastausgleichs unter Linux

Bevor Sie den Nginx-Lastausgleich einrichten, müssen Sie Nginx auf Ihrem Server installieren und dabei den Standardpaketmanager für Ihre Distribution verwenden (siehe Abbildung).

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

Erstellen Sie als Nächstes eine Serverblockdatei mit dem Namen /etc/nginx/conf.d/loadbalancer.conf (geben Sie einen Namen Ihrer Wahl ein).

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

Kopieren Sie dann die folgende Konfiguration und fügen Sie sie ein. Diese Konfiguration ist standardmäßig Round-Robin, da keine Lastausgleichsmethode definiert ist.

 
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 der obigen Konfiguration wird die Direktive proxy_pass (die innerhalb eines Speicherorts angegeben werden sollte, in diesem Fall /) verwendet, um eine Anfrage an die HTTP-Proxy-Server weiterzuleiten, auf die mit verwiesen wird Wort Backend, in der Upstream-Direktive (wird zum Definieren einer Gruppe von Servern verwendet). Außerdem werden die Anforderungen mithilfe eines gewichteten Round-Robin-Balancing-Mechanismus zwischen den Servern verteilt.

Um den geringsten Verbindungsmechanismus zu verwenden, verwenden Sie die folgende Konfiguration

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

Und um den Sitzungspersistenzmechanismus ip_hash zu aktivieren, verwenden Sie:

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

Sie können die Lastverteilungsentscheidung auch mithilfe von Servergewichten beeinflussen. Bei Verwendung der folgenden Konfiguration werden dem Anwendungsserver 192.168.58.5 bei sechs Anfragen von Clients vier Anfragen zugewiesen und zwei gehen an 192.168.58.8.

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

Speichern Sie die Datei und beenden Sie sie. Stellen Sie dann sicher, dass die Nginx-Konfigurationsstruktur nach dem Hinzufügen der letzten Änderungen korrekt ist, indem Sie den folgenden Befehl ausführen.

sudo nginx -t

Wenn die Konfiguration in Ordnung ist, starten Sie neu und aktivieren Sie den Nginx-Dienst, um die Änderungen zu übernehmen.

sudo systemctl restart nginx
sudo systemctl enable nginx

Testen des Nginx-Lastausgleichs unter Linux

Um den Nginx-Lastausgleich zu testen, öffnen Sie einen Webbrowser und navigieren Sie über die folgende Adresse.

http://tecmintapp.lan

Sobald die Website-Oberfläche geladen ist, notieren Sie sich die geladene Anwendungsinstanz. Aktualisieren Sie dann die Seite kontinuierlich. Irgendwann sollte die App vom zweiten Server geladen werden, was einen Lastausgleich anzeigt.

Sie haben gerade gelernt, wie Sie Nginx als HTTP-Load-Balancer unter Linux einrichten. Über das unten stehende Feedback-Formular würden wir gerne Ihre Meinung zu diesem Leitfaden und insbesondere zum Einsatz von Nginx als Load Balancer erfahren. Weitere Informationen finden Sie in der Nginx-Dokumentation zur Verwendung von Nginx als HTTP-Load-Balancer.