Globale HTTP-Load Balancer von Google Compute Engine

Globale HTTP-Load Balancer von Google Compute Engine

Ich verwende Google Compute Engine. Ich habe den Deployment Manager eingerichtet und er richtet eine Firewall ein, die es dem Netzwerk LB ermöglicht, eine Verbindung zu Webservern herzustellen. Die Webserver selbst fügen sie einem Instance Group Manager hinzu und er richtet einen Autoscaler ein, der auf den Instance Group Manager abzielt. Der HTTP Health Check ist eingerichtet und wird für Webserverinstanzen ausgeführt. Er fügt die HTTP Health Checks einem Backend-Dienst hinzu und fügt den Instance Group Manager dem Backend-Dienst hinzu. Er richtet eine URL-Map ein, die den Backend-Dienst als Standarddienst hat. Der URL-Mapper wiederum wird dem HTTP-Proxy hinzugefügt, auf den eine Weiterleitungsregel mit einer globalen IP verweist.

Dieses Setup ist dem hier beschriebenen Setup sehr ähnlichhttps://cloud.google.com/solutions/scalable-and-resilient-apps

Kommen wir nun zu dem Problem, das ich mit diesem Setup scheinbar lösen kann. Auf den Webservern läuft ein Nginx-Server, der auf Anfragen antwortet und mit dem ich Ereignisquellenverbindungen herstellen kann, aber nach genau 1 Minute wird die Verbindung mit dem Fehler INCOMPLETE_CHUNKED_ENCODING geschlossen. Dies passiert nicht, wenn ich mich direkt mit einem der Webserver verbinde. Ich habe die Sysconf-Einstellung für TCP-Keepalive wie folgt geändert:

net.ipv4.tcp_keepalive_time=600 
net.ipv4.tcp_keepalive_intvl=15 
net.ipv4.tcp_keepalive_probes=5

Dies nach dem Lesenhttps://cloud.google.com/compute/docs/troubleshooting#networktraffic

Ich habe unzählige Dinge in der Nginx-Konfiguration ausprobiert und kann scheinbar keine Lösung finden.

Hat jemand eine Idee oder ähnliche Probleme?

Antwort1

Alex hatte Recht, als er den Link zu diesem Beitrag geteilt hat, da er zum Hauptproblem führt, aber einer kleinen Erklärung bedarf.

Sie müssen den Wert „keepalive_timeout“ (Standard ist 65) in Ihrer Nginx-Konfigurationsdatei (/etc/nginx/nginx.conf) ändern, um das HTTP-Verbindungstimeout zu erhöhen, sodass Ihr Timeout länger ist als das 600-Sekunden-Timeout im Load Balancer. Dies führt dazu, dass der Load Balancer die Seite ist, die inaktive Verbindungen schließt, und nicht Nginx.

Passen Sie nginx-Keepalives an, damit sie mit dem HTTP(S)-Load Balancer der Google Cloud Platform funktionieren.
Setzen Sie „keepalive_timeout 650;“ in nginx/etc/nginx/nginx.conf

keepalive_timeout 650;
keepalive_requests 10000;

Ausführlichere Informationen zuHTTP-Persistenz.

Antwort2

Ihr nginxbenötigt wahrscheinlichetwas Feintuning.

verwandte Informationen