Wie legen Sie beim Konfigurieren des HA-Proxys fest, welche Werte den Zeitüberschreitungen zugewiesen werden sollen? Ich habe ein halbes Dutzend Beispiele in verschiedenen Blogs gelesen, und jeder verwendet unterschiedliche Timeouts, und niemand diskutiert, warum.
HAProxy scheint sich insbesondere Sorgen um Client, Verbindung und Server zu machen, über die HAPRoxy eine Warnung ausgibt, wenn Sie die Einstellung vollständig aufheben:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
Die Dokumentation ist in dieser Hinsicht nicht hilfreich: Sie schlägt "etwas mehr als ein Vielfaches von 3 Sekunden" vor, aber nicht, warum Sie ein Vielfaches von 1 gegen 100 oder 42 wählen würden.
Das von mir verwendete RPM (Amazon Linux-Repository) legt die folgenden Standardeinstellungen fest:
timeout connect 10s
timeout client 1m
timeout server 1m
Zwei davon sind exakte Vielfache von 3 Sekunden und verstoßen gegen den einzigen offiziellen Rat, den ich gesehen habe.
Wenn Sie keinen speziellen Tuning-Rat haben, ist eine einfachere Frage vielleicht: Was kann ich bei sehr kurzen oder sehr langen Timeouts falsch machen?
Vorwort
Ich habe HAProxy für eine Weile optimiert und eine Menge Leistungstests durchgeführt. Von 100 HTTP-Anfragen / s bis 50 000 HTTP-Anfragen / s.
Der erste Rat ist, die Statistikseite auf HAProxy zu aktivieren . Sie MÜSSEN überwachen, keine Ausnahme. Sie müssen auch eine Feinabstimmung vornehmen, wenn Sie über 10.000 Anfragen / s hinausgehen möchten.
Zeitüberschreitungen sind ein verwirrendes Biest, da sie einen großen Bereich möglicher Werte aufweisen, von denen die meisten keinen beobachtbaren Unterschied aufweisen. Ich habe noch nicht gesehen, dass etwas wegen einer um 5% niedrigeren oder um 5% höheren Zahl fehlschlägt. 10000 vs 11000 Millisekunden, wen interessiert das? Wahrscheinlich nicht dein System.
Aufbau
Ich kann nicht mit gutem Gewissen ein paar Zahlen als "beste Auszeit für alle" angeben.
Was ich stattdessen feststellen kann, sind die aggressivsten Zeitüberschreitungen, die für den HTTP (S) -Lastausgleich immer akzeptabel sind. Wenn Sie auf einen niedrigeren Wert stoßen, müssen Sie Ihren Load Balancer neu konfigurieren.
Timeout-Client:
Lesen Sie : Dies ist die maximale Zeit zu empfangen HTTP - Request - Header aus dem Client.
3G / 4G / 56k / Satellit kann manchmal langsam sein. Dennoch sollten sie in der Lage sein, HTTP-Header in wenigen Sekunden zu senden, NICHT in 30 Sekunden.
Wenn jemand eine so schlechte Verbindung hat, dass er mehr als 30 Sekunden benötigt, um eine Seite anzufordern (dann mehr als 10 * 30 Sekunden, um die 10 eingebetteten Bilder / CSS / JS anzufordern), halte ich es für akzeptabel, ihn abzulehnen.
Timeout-Server:
Lesen : Dies ist die maximale Zeit, um HTTP- Antwortheader vom Server zu empfangen (nachdem die vollständige Clientanforderung empfangen wurde). Grundsätzlich ist dies die Verarbeitungszeit von Ihren Servern, bevor die Antwort gesendet wird.
Wenn Ihr Server so langsam ist, dass er mehr als 30 Sekunden benötigt, um eine Antwort zu geben, ist es meines Erachtens akzeptabel, ihn für tot zu halten.
Sonderfall : Bei einigen RARE-Diensten kann es eine ganze Minute oder länger dauern, bis eine Antwort vorliegt. Dieses Zeitlimit muss für diese spezielle Verwendung möglicherweise erheblich erhöht werden. (Hinweis: Dies ist wahrscheinlich ein Fall von schlechtem Design. Verwenden Sie eine asynchrone Kommunikation oder verwenden Sie überhaupt kein HTTP.)
Timeout-Verbindung:
Lesen : Die maximale Zeit, die ein Server benötigt, um eine TCP-Verbindung zu akzeptieren.
Server befinden sich im selben LAN wie HAProxy, daher sollte es schnell sein. Warten Sie mindestens 5 Sekunden, da es so lange dauern kann, bis etwas Unerwartetes passiert (ein verlorenes TCP-Paket zum erneuten Übertragen, ein Server, der einen neuen Prozess veranlasst, die neuen Anforderungen entgegenzunehmen, Anstieg des Datenverkehrs).
Sonderfall : Wenn sich Server in einem anderen LAN oder über eine unzuverlässige Verbindung befinden. Dieses Zeitlimit muss möglicherweise erheblich erhöht werden. (Hinweis: Dies ist wahrscheinlich ein Fall von schlechter Architektur.)
Timeout-Check:
Lesen : Wenn ein Healthcheck durchgeführt wird, muss der Server
timeout connect
die Verbindung akzeptieren und danntimeout check
die Antwort geben.Für alle Server MUSS eine HTTP (S) -Zustandsüberprüfung konfiguriert sein. Nur so kann der Load Balancer feststellen, ob ein Server verfügbar ist. Der Healthcheck ist eine einfache
/isalive
Seite, die immer antwortetOK
.Geben Sie diesem Timeout mindestens 5 Sekunden, da es so lange dauern kann, bis etwas Unerwartetes passiert (ein verlorenes TCP-Paket zum erneuten Übertragen, ein Server, der einen neuen Prozess veranlasst, die neuen Anforderungen entgegenzunehmen, Anstieg des Datenverkehrs).
Kriegsgeschichte : Viele Leute glauben fälschlicherweise , dass der Server diese einfache Seite immer in 3 ms beantworten kann. Sie setzen ein aggressives Timeout (<2000 ms) mit aggressivem Failover (2 fehlgeschlagene Prüfungen = Server tot). Ich habe gesehen, wie ganze Websites deswegen herunterfielen. Normalerweise kommt es zu einem leichten Anstieg des Datenverkehrs, die Back-End-Server werden langsamer, die Integritätsprüfungen werden verzögert ... bis plötzlich alle zusammen eine Zeitüberschreitung verzeichnen.
quelle