Nginx-Stream-Konfigurationsproxy (Nginx TCP/UDP-Lastausgleich)

Nginx-Stream-Konfigurationsproxy (Nginx TCP/UDP-Lastausgleich)

Auftakt

Wir alle wissen, dass nginx ein hervorragender Reverse-Proxy-Dienst ist. Wer nginx verwendet hat, sollte auch Upstream kennen. Der Upstream-Knoten wird im Allgemeinen in HTTP-Knotenklammern platziert. Die Liste der Server, deren Last ausgeglichen werden muss, wird normalerweise im Upstream konfiguriert.

Die gebräuchlichsten Verwendungszwecke sind wie folgt:

#Benutzer, niemand, niemand.
#Arbeitsprozesse 2;
#pid /nginx/pid/nginx.pid;
Fehlerprotokoll Protokoll/Fehlerprotokoll Debuggen;
Ereignisse {
    …
}
http {
    …
    Upstream-Testserver {   
      Server 192.168.1.5:8080;
      Server 192.168.1.6:8080;
      …
    }

    Server {
        …
        Standort / {
           …     
           Proxy-Passwort http://Testserver;
        } 
    }
}

Wie aus der Struktur ersichtlich ist, wird diese Konfiguration häufig verwendet, hauptsächlich zum Umgang mit HTTP-Reverse-Proxys.

Aber wenn wir das TCP des Backend-Dienstes proxyen möchten, wird das von Nginx unterstützt? Beispielsweise lautet die Antwort bei MySQL, Redis usw. ja. Tatsächlich unterstützt nginx auch den Lastausgleich von TCP/UDP. Worüber ich als nächstes sprechen möchte, ist das Stream-Modul von nginx. Durch Konfigurieren des Streams können solche Anforderungen erfüllt werden. Hier wird eher empfohlen, nginx hauptsächlich für HTTP-Reverse-Proxys zu verwenden.

Hauptartikel

Der TCP/UDP-Lastausgleich von Nginx wird durch Anwendung des Stream-Proxy-Moduls (ngx_stream_proxy_module) und des Stream-Upstream-Moduls (ngx_stream_upstream_module) implementiert. Sowohl der TCP-Lastausgleich von Nginx als auch LVS sind vierschichtige Lastausgleichsanwendungen. Der Unterschied besteht darin, dass LVS im Linux-Kernel platziert ist, während Nginx auf Benutzerebene ausgeführt wird. Der auf Nginx basierende TCP-Lastausgleich kann eine flexiblere Verwaltung und Kontrolle des Benutzerzugriffs erreichen.

Nachdem wir nun die grundlegenden Konzepte verstanden haben, schauen wir uns ein konkretes Konfigurationsbeispiel an:

Arbeitsprozesse 4;
Arbeiter_rlimit_nofile 40000;

Ereignisse {
    Arbeiterverbindungen 8192;
}

Strom {
    Upstream meine_Server {
        am wenigsten_Verbindung;
        # Wenn innerhalb von 5 Sekunden 3 Fehler auftreten, wird die Verbindung zum Server für 5 Sekunden getrennt
        Server <IP_SERVER_1>:3306 max_fails=3 Fail_Timeout=5s;
        Server <IP_SERVER_2>:3306 max_fails=3 Fail_Timeout=5s;
        Server <IP_SERVER_3>:3306 max_fails=3 Fail_Timeout=5s;
    }
    Server {
        hören Sie 3306;
        proxy_connect_timeout 5s; # Das Timeout für die Herstellung einer Verbindung mit dem Proxy-Server beträgt 5 s
        proxy_timeout 10s; # Das maximale Timeout zum Abrufen der Antwort vom Proxyserver beträgt 10 s
        proxy_next_upstream on; # Wenn der Proxy-Server einen Fehler zurückgibt oder eine Zeitüberschreitung auftritt, wird die Client-Verbindungsanforderung, die keine Antwort zurückgegeben hat, an den nächsten Server im Upstream weitergeleitet proxy_next_upstream_tries 3; # Weiterleitungsversuchsanforderungen werden bis zu dreimal weitergeleitet proxy_next_upstream_timeout 10s; # Das Gesamtzeitlimit für Versuche beträgt 10 Sekunden
        proxy_socket_keepalive on; # Aktivieren Sie die Option SO_KEEPALIVE zur Heartbeat-Erkennung proxy_pass my_servers;
    }
}

Mehr Erklärung

  • Der TCP/UDP-Lastausgleich von Nginx unterstützt auch den passiven Integritätserkennungsmodus bei der Zuweisung von Verbindungen. Wenn eine Verbindung zu einem Backend-Server fehlschlägt und die Anzahl aufeinanderfolgender Fehler den max_fails-Parameter innerhalb des fail_timeout-Parameters überschreitet, versetzt Nginx den Server in einen nicht verfügbaren Zustand und weist dem Server innerhalb des fail_timeout-Parameters keine Verbindungen zu. Wenn der Parameter fail_timeout abläuft, wird versucht, eine Verbindung zuzuweisen, um festzustellen, ob der Server wiederhergestellt wurde. Wenn eine Verbindung hergestellt werden kann, gilt sie als wiederhergestellt.
  • Der Parameter max_fails bezieht sich auf den kumulierten Wert der Anzahl der Verbindungsfehler, die Nginx dem aktuellen Server innerhalb von 10 Sekunden zugewiesen hat, und wird alle 10 Sekunden auf 0 zurückgesetzt.
  • Der Parameter fail_timeout ist sowohl die maximale Zeit für die Anzahl der Fehler als auch die Sicherungszeit, bis der Server in den Fehlerzustand versetzt wird. Wenn diese Zeit überschritten wird, wird die Verbindung erneut zugewiesen.
  • Wenn sich der Parameter proxy_connect_timeout oder proxy_timeout im Timeout-Status befindet, wird der Mechanismus proxy_next_upstream ausgelöst.
  • Der Parameter proxy_next_upstream ist ein Mechanismus zur Verbesserung der Verbindungserfolgsrate unter Nginx. Wenn der Proxyserver einen Fehler zurückgibt oder eine Zeitüberschreitung auftritt, versucht er, an den nächsten verfügbaren Proxyserver weiterzuleiten.
  • Die Häufigkeit, mit der der Parameter „proxy_next_upstream_tries“ festgelegt wird, umfasst die Häufigkeit, mit der die erste Anforderung weitergeleitet wird.
  • Die TCP-Verbindung bleibt bestehen, bis eine Benachrichtigung zum Schließen der Verbindung eingeht. Wenn das maximale Intervall zwischen zwei aufeinanderfolgenden erfolgreichen Lese- oder Schreibvorgängen zwischen Nginx und dem Proxy-Server die durch die Direktive proxy_timeout konfigurierte Zeit überschreitet, wird die Verbindung geschlossen. Im Szenario einer langen TCP-Verbindung sollte die Proxy-Timeout-Einstellung entsprechend angepasst werden und auf die Konfiguration der SO_KEEPALIVE-Option des Systemkernels geachtet werden, um eine vorzeitige Trennung zu verhindern.

Hinweis: Wenn Ihre Konfiguration des Steam-Moduls ungültig ist, überprüfen Sie bitte, ob die von Ihnen verwendete Version Stream unterstützt. Wenn das Modul nicht integriert ist, müssen Sie beim Kompilieren den Parameter --with-stream angeben, um es so zu kompilieren, dass es Stream-Proxy unterstützt.

Dies ist das Ende dieses Artikels über den Nginx-Stream-Konfigurationsproxy (Nginx TCP/UDP-Lastausgleich). Weitere relevante Inhalte zum Nginx-Stream-Konfigurationsproxy finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Upstream-Konfiguration und -Funktion

<<:  Einige allgemeine Eigenschaften von CSS

>>:  So wählen Sie alle untergeordneten Elemente aus und fügen ihnen in CSS Stile hinzu

Artikel empfehlen

So aktualisieren Sie CentOS7 auf CentOS8 (detaillierte Schritte)

Dieser Artikel erläutert anhand eines konkreten B...

So wird eine Select-Anweisung in MySQL ausgeführt

Inhaltsverzeichnis 1. MySQL aus einer Makroperspe...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

So verbinden Sie JDBC mit MySQL 5.7

1. Bereiten Sie zunächst die MySQL- und Eclipse-U...

Installations-Tutorial zur komprimierten Version von MySQL 8.0.11 unter Win10

In diesem Artikel finden Sie das Installations-Tu...

Reiner CSS-Beispielcode für Meteorschauer-Hintergrund

GitHub-Adresse, Sie können es mit einem Stern mar...

...

So aktualisieren Sie die Knotenversion unter CentOs manuell

1. Suchen Sie das entsprechende NodeJS-Paket unte...

Wie gut kennen Sie sich mit reinen HTML-Tags aus?

Die folgenden HTML-Tags umfassen grundsätzlich all...

Detaillierte Schritte zum Upgrade von mysql8.0.11 auf mysql8.0.17 unter Win2008

Upgrade-Hintergrund: Um die Sicherheitslücke in d...

Untersuchung des Problems der Flip-Navigation mit geneigter Maus

In diesem Artikel analysieren wir als Beispiel die...

Ein Artikel, der Ihnen hilft, jQuery-Animationen zu verstehen

Inhaltsverzeichnis 1. Steuern Sie die Anzeige und...