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

Umfassendes Verständnis des MySQL-Protokolls für langsame Abfragen

Inhaltsverzeichnis Was ist das Protokoll langsame...

Lösung für den MySQL-Fehlercode 1064

Wenn die Wörter in der SQL-Anweisung mit den Schl...

So implementieren Sie die Fernzugriffskontrolle in Centos 7.4

1. SSH-Remoteverwaltung SSH ist ein sicheres Kana...

JavaScript zum dynamischen Laden und Löschen von Tabellen

In diesem Artikel wird der spezifische JavaScript...

Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene

Überprüfen Sie die Transaktionsisolationsebene In...

Zusammenfassung der MySQL-Abfragesyntax

Vorwort: In diesem Artikel wird hauptsächlich die...

Implementierung eines Karussells mit nativem JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Über das WeChat-Gleitproblem des UniApp-Editors

Das Uniapp-Applet wird ein ähnliches Dropdown-Pro...

Detaillierter Vergleich von Ember.js und Vue.js

Inhaltsverzeichnis Überblick Warum ein Framework ...

Analyse und Lösung zur Leistungsoptimierung von Vue.js-Anwendungen

Inhaltsverzeichnis 1. Einleitung 2. Warum brauche...

Erklärung zur Verwendung von „Ersetzen“ und „Ersetzen in“ in MySQL

„Replace“ und „Replace into“ von MySQL sind beide...

Detaillierte Analyse des Unterschieds zwischen Ref und Reactive in Vue3.0

Inhaltsverzeichnis Ref und Reaktiv Referenz Reakt...