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

JavaScript-Timer zur Realisierung einer zeitlich begrenzten Flash-Sale-Funktion

In diesem Artikel wird der spezifische JavaScript...

CSS3-Textanimationseffekte

Wirkung html <div Klasse="sp-container&qu...

Einige Hinweise zur MySQL-Self-Join-Deduplizierung

Lassen Sie mich kurz das Funktionsszenario erklär...

Analysieren der Knotenereignisschleife und der Nachrichtenwarteschlange

Inhaltsverzeichnis Was ist asynchron? Warum brauc...

Tiefes Verständnis der Verwendung von ::before/:before und ::after/:after

Teil 1: Grundlagen 1. Im Gegensatz zu Pseudoklass...

Problemlösungsvorgänge für Alpine Docker-Bildschriftarten

1. Führen Sie Schriftarten aus, öffnen Sie den Sc...

Detaillierte Erklärung der MySQL EXPLAIN-Ausgabespalten

1. Einleitung Die EXPLAIN-Anweisung liefert Infor...

Bedeutung und Verwendung einer Linux-CD

Was bedeutet Linux-CD? Unter Linux bedeutet cd „V...

Detaillierte Erläuterung der MySQL-Transaktionsverwaltungsvorgänge

Dieser Artikel beschreibt die MySQL-Transaktionsv...

MySQL-Datumsfunktionen und Datumskonvertierungs- und -formatierungsfunktionen

MySQL ist eine kostenlose relationale Datenbank m...

Erste Schritte mit Nginx Reverse Proxy

Inhaltsverzeichnis Überblick Die Rolle des Revers...