Heim  >  Artikel  >  Java  >  So erreichen Sie einen Lastausgleich mit Nginx+SpringBoot

So erreichen Sie einen Lastausgleich mit Nginx+SpringBoot

WBOY
WBOYnach vorne
2023-05-29 17:28:061490Durchsuche

Einführung in den Lastausgleich

Bevor wir die Lastausgleichsimplementierung von Nginx vorstellen, sprechen wir kurz über die Klassifizierung des Lastausgleichs, der hauptsächlich in Hardware-Lastausgleich und Software-Lastausgleich unterteilt ist. Der Hardware-Lastausgleich verwendet spezielle Software und Hardware In Kombination mit der Ausrüstung bieten Gerätehersteller vollständige und ausgereifte Lösungen wie f5 an, die in Bezug auf Datenstabilität und -sicherheit sehr zuverlässig sind, aber die Kosten sind höher als bei Software, die auf Software wie z. B. basiert Nginx Main, ein implementierter Nachrichtenwarteschlangenverteilungsmechanismus.

Einfach ausgedrückt besteht der sogenannte Lastausgleich darin, viele Anfragen auszulagern und sie verschiedenen Servern zur Verarbeitung zuzuweisen. Ich habe zum Beispiel 3 Server, nämlich a, b und c, und verwende dann Nginx für den Lastausgleich und eine Polling-Strategie. Wenn zu diesem Zeitpunkt 9 Anfragen eingehen, werden die 9 Anfragen gleichmäßig auf a und b verteilt. Beim CF-Server verarbeitet jeder Server drei Anforderungen, sodass wir die Eigenschaften mehrerer Maschinencluster nutzen können, um den Druck auf einen einzelnen Server zu verringern.

Ein Beispieldiagramm des von Nginx implementierten Lastausgleichs:

So erreichen Sie einen Lastausgleich mit Nginx+SpringBoot

Lastausgleichsstrategie

Nginx Open Source unterstützt vier Lastausgleichsmethoden und Nginx Plus fügt zwei weitere Methoden hinzu.

1.Round-Robin:

Abfragen und Senden von Anfragen für alle Anfragen, die Standardzuweisungsmethode.

nginx.conf-Konfigurationsbeispiel:

Hinweis: Der obige Domainname kann auch durch IP ersetzt werden.

2.geringste Verbindungen:

Senden Sie die Anfrage an den Server mit der geringsten Anzahl aktiver Verbindungen, auch unter Berücksichtigung der Servergewichtung.

nginx.conf-Konfigurationsbeispiel:

3.ip-Hash:

Der Server, der die Anfrage sendet, wird durch die Client-IP-Adresse bestimmt. In diesem Fall wird der Hashwert anhand der ersten drei Bytes der IPv4-Adresse oder der gesamten IPv6-Adresse berechnet. Diese Methode garantiert, dass Anfragen von derselben Adresse denselben Server erreichen, es sei denn, dieser Server ist nicht verfügbar.

4.generischer Hash:

Der Server, an den die Anfrage gesendet wird, wird durch einen benutzerdefinierten Schlüssel bestimmt, der eine Textzeichenfolge, eine Variable oder eine Kombination sein kann. 5. Mindestzeit (nur Nginx Plus) die „least_time“-Direktive:

header: Zeit, um das erste Byte vom Server zu empfangen.

    last_byte: Die Zeit bis zum Empfang der vollständigen Antwort vom Server.
  • last_byte inflight: Die Zeit bis zum Empfang der vollständigen Antwort vom Server.
  • 6.random:

  • Jede Anfrage wird an einen zufällig ausgewählten Server übermittelt. Wenn zwei Parameter angegeben sind, wählt Nginx zunächst zufällig zwei Server basierend auf der Servergewichtung aus und wählt dann einen davon mithilfe der angegebenen Methode aus.

least_conn: Mindestanzahl aktiver Verbindungen

    least_time=header (nginx plus) : Mindestdurchschnittliche Zeit zum Empfang von Antwortheadern vom Server ($upstream_header_time).
  • least_time=last_byte (nginx plus): Die kürzeste durchschnittliche Zeit, um eine vollständige Antwort vom Server zu erhalten ($upstream_response_time).
  • nginx+springboot erreicht Lastausgleich

Umgebungsvorbereitung

Abhängig von jdk1.8 oder höher;

  • Abhängig von der Nginx-Umgebung;


  • Die Projekte hier sind meine Besitzen Sie ein früheres Springboot-Projekt, die Adresse des Springboot-Projekts: https://github.com/xuwujing/springboot-study/tree/master/springboot-thymeleaf


    Zuerst laden wir dieses Projekt herunter und geben Folgendes ein:

    Port, ändern Sie es beispielsweise in 8086 .

nginx-Konfiguration

mvn clean package 将项目进行打包为jar文件,然后将application.properties和此jar项目放在一个文件夹中,然后复制该文件夹(这里为了清晰所以进行复制,实际不复制更改端口重启也行),修改复制文件夹application.properties

Wir finden die Nginx-Konfigurationsdatei nginx.conf, die sich im Verzeichnis nginx/conf/nginx.conf befindet. Dann ändern wir die Konfiguration und fügen die folgende Konfiguration hinzu:


upstream pancm: Definieren Sie einen Namen nach Ihren Wünschen;

    Server + IP: Port- oder Domänenname;
  • Wenn Sie die Round-Robin-Strategie nicht verwenden möchten, können Sie ihn auch in einen anderen ändern.


    Fügen Sie dann die folgende Konfiguration auf dem Server hinzu/ändern Sie sie:

  • Konfigurationsanweisungen:

Server: der Name des virtuellen Hosts, mehrere Server können in einem http konfiguriert werden;

    listen: Nginx-Standardport;
  • Servername: Die Adresse des Nginx-Dienstes. Sie können mehrere Domänennamen verwenden, die durch Leerzeichen getrennt sind.
  • proxy_pass: Proxy-Pfad, konfigurieren Sie im Allgemeinen den Namen nach dem Upstream, um einen Lastausgleich zu erreichen. Sie können IP direkt für den Sprung konfigurieren.
  • nginx.conf vollständige Konfiguration:

    Lastausgleichstest

    Nach Abschluss der Nginx-Konfiguration starten wir Nginx.
    Linux-Eingabe /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf, wenn es bereits gestartet ist, können Sie /usr/ verwenden local/nginx/ Verwenden Sie den Befehl sbin/nginx -s reload, um die Konfigurationsdatei im laufenden Betrieb zu laden. Klicken Sie in Windows direkt auf nginx.exe oder cmd nginx-Verzeichnis zum Ausführen start nginx zum Starten. Wenn es gestartet ist, können Sie weiterhin <code>nginx -s reload für das Hot-Loading verwenden. /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,如果已经启动可以使用/usr/local/nginx/sbin/nginx -s reload命令进行热加载配置文件,windows直接点击nginx目录下的nginx.exe或者 cmd运行start nginx进行启动,如果启动了依旧可以使用nginx -s reload进行热加载。

    nginx启动完成之后,我们依次启动刚刚下载的springboot和复制更改端口的项目,输入:java -jar springboot-jsp-thymeleaf.jar

    Nachdem Nginx gestartet ist, starten wir das gerade heruntergeladene Springboot und kopieren das Projekt, um den Port zu ändern. Geben Sie zum Starten Folgendes ein: java -jar springboot-jsp-thymeleaf.jar.

    Nachdem alles erfolgreich gestartet ist, können wir die IP-Adresse des Dienstes in den Browser eingeben, um darauf zuzugreifen.

    Beispielbild:

    So erreichen Sie einen Lastausgleich mit Nginx+SpringBoot

    Hinweis: Hier verwende ich zum Testen das Windows-System und das tatsächliche Linux-System ist dasselbe.

    Dann machen wir es und schauen uns das Konsolenprotokoll an!

    So erreichen Sie einen Lastausgleich mit Nginx+SpringBoot

    Aus dem obigen Beispieldiagramm haben wir 4 Schnittstellenaktualisierungsanfragen gestellt und diese schließlich gleichmäßig auf die beiden Dienste verteilt. Aus den obigen Testergebnissen haben wir einen Lastausgleich erreicht.

    Hier spreche ich über die Vorsichtsmaßnahmen bei der Verwendung von Nginx. Beim Lernen und Testen ist es im Allgemeinen kein Problem, den Standardport von Nginx zu verwenden, um einen Lastausgleich zu erreichen, aber wenn wir ihn im Projekt verwenden, insbesondere die Anmeldeschnittstelle und wann Wenn der Port nicht 80 ist, springt die Anmeldeschnittstelle nicht. Beim Debuggen wird ein Fehler wie „net::err_name_not_resolved“ angezeigt. Der Grund dafür ist, dass der Standardport von Nginx auch dieser ist In diesem Fall müssen Sie die Konfiguration „proxy_set_header host $host:port“ unter „location“ hinzufügen. Halten Sie einfach den Port und den Listen-Port konsistent. 🎜

Das obige ist der detaillierte Inhalt vonSo erreichen Sie einen Lastausgleich mit Nginx+SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen