Haproxy - Timeout http-Anfrage vs Timeout http-Keep-Alive vs Timeout Server

7

Ich versuche, mich mit den Haproxy-Optionen zu beschäftigen

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>

miteinander interagieren. Ich betreibe eine Apache-Website auf zwei App-Servern, die sich hinter einem Haproxy-Load-Balancer befinden. Im Moment habe ich Keep-Alive nicht aktiviert, aber ich habe damit experimentiert, weil ich denke, dass es helfen würde, die Site zu optimieren. Mein Ziel war es, Keep-Alive für die Verbindung zwischen Browser und Haproxy zu aktivieren, aber Keep-Alive zwischen Haproxy und Apache zu deaktivieren. Ich habe das mit erreicht

option http-server-close

Jetzt möchte ich die Keep-Alive-Timeouts einrichten. Ich habe das Haproxy-Handbuch für die Timeout-Option http-request, die Timeout-Option http-keep-alive und die Timeout- Serveroption studiert . Wenn ich das Handbuch richtig verstehe, ist das Timeout http-keep-alive die Zeit, um die Verbindung zwischen neuen Anforderungen offen zu halten, und das Timeout http-request ist die Zeit, um auf die Header der Antwort zu warten, bevor die Verbindung geschlossen wird. Aber was ich anscheinend nicht herausfinden kann, ist, was der Timeout-Server vorschreibt. Ich möchte sagen, dass der Timeout-Server die Zeit ist, auf die vollständige Antwort zu warten, aber kann jemand das bestätigen? Wenn ich recht habe, dass der Timeout-Server die Zeit ist, auf die vollständige Antwort zu warten, habe ich dann Recht, dass er keinen Einfluss auf die Einstellungen für das Keep-Alive-Timeout haben sollte?

Hier ist meine Haproxy-Konfiguration, an deren Änderung ich arbeite:

global
    maxconn 4096
    pidfile /var/run/haproxy.pid
    daemon

defaults
    mode http
    retries 3
    option redispatch
    maxconn 5000        
    timeout connect 5000
    timeout client 300000
    timeout server 300000        

listen HTTP *:80
    mode http
    cookie HTTP insert nocache
    balance roundrobin   
    #option httpclose # I just commented this out in favor of http-server-close
    option http-server-close
    timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
    timeout http-request 5000 
    option forwardfor
    stats enable
    stats uri /my-lb-status
    stats auth myLbStatus:123456
    reqadd X-Forwarded-Proto:\ http
    option httpchk GET /robots.txt HTTP/1.0
    server SERVER_A 1.2.3.4:80 cookie app_01 check
    server maintenance 127.0.0.1:8080 backup

Letztendlich ist es mein Ziel, Keep-Alive zwischen dem Browser und Haproxy zu aktivieren, mit der Voraussetzung, dass ein Bericht ausgeführt werden kann, dessen Ausführung auf den App-Servern 2-3 Minuten dauern kann.

Mike Levy
quelle

Antworten:

16

Nur um ein bisschen zu klären. Ich hoffe das beantwortet auch deine Fragen.

Timeout http-Anfrage

Ist die Zeit vom ersten empfangenen Client-Byte bis zum letzten an den Client gesendeten Byte (unabhängig davon, ob Sie am Leben bleiben). Wenn Ihr Backend zu langsam ist oder der Client seine Anfrage zu langsam sendet, kann die gesamte Kommunikation länger dauern und die Anfrage wird gelöscht (und eine Zeitüberschreitung an den Client gesendet).

Timeout http-Keep-Alive

Die Zeit, um eine Verbindung zwischen Haproxy und dem Client offen zu halten (nachdem die Client-Antwort gesendet wurde). Dies hat nichts mit der Antwortzeit des Backends zu tun. Dies hat nichts mit der Länge einer einzelnen Anforderung zu tun (dh dem Zeitlimit für http-Anforderungen). Dies ermöglicht schnellere Antworten, wenn der Benutzer mehrere Ressourcen anfordert (z. B. HTML, IMG und JS). Mit Keep Alive können die einzelnen Anforderungen dieselbe TCP-Verbindung verwenden. Auf diese Weise wird die Ladezeit für eine vollständige Webseite reduziert.

Timeout-Server

Dies ist das Zeitlimit für Ihre Backend-Server. Bei Erreichen antwortet Haproxy mit 504 (Gateway-Timeout). Dies hat auch nichts mit Keep Alive zu tun, da es nur um die Verbindung zwischen Proxy und Backend geht.

edlerd
quelle