web-dev-qa-db-fra.com

Haproxy - Timeout HTTP-Demande VS Timeout HTTP-Keep-Alive vs Timeout Server

J'essaie d'envelopper ma tête comment les options haproxy

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

intéragir ensemble. Je suis un site Web Apache sur deux serveurs d'applications vivant derrière un équilibreur de charge haproxy. À l'heure actuelle, je n'ai pas de maintien en vie, mais j'essaye de l'activer, car je pense que cela aiderait à optimiser le site. Mon objectif était d'activer la connexion à la connexion entre le navigateur et l'haproxy, mais désactivez-vous entre Haproxy et Apache. J'ai accompli cela avec

option http-server-close

Maintenant, je cherche à mettre en place les délais d'attente continue. J'ai étudié le Haproxy manuel pour l'option Timeout HTTP-Demander, l'option Timeout HTTP-Keep-Alive et l'option Server Timeout. Si je comprends bien le manuel, le délai d'attente HTTP-Keep-Alive est le moment de garder la connexion ouverte entre les nouvelles demandes et le délai d'attente HTTP-Demander est l'heure d'attendre les en-têtes de la réponse avant de fermer la connexion. Mais ce que je ne peux pas sembler comprendre, c'est quel délai d'attente dicte. Je tiens à dire que Timeout Server est le moment d'attendre la réponse complète, mais quelqu'un peut-il confirmer cela? Si j'ai raison que le timeout Server est le moment d'attendre la réponse complète, alors je suis correct que cela ne devrait pas avoir d'incidence sur les paramètres de délai d'attente de conservation?

Voici ma configuration haproxy que je travaille sur la modification:

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

En fin de compte, mon objectif est de pouvoir activer la maintenance entre le navigateur et Haproxy avec l'obligation de pouvoir exécuter un rapport pouvant prendre 2-3 minutes pour exécuter sur les serveurs d'applications.

7
Mike Levy

Juste pour clarifier un peu. J'espère que cela répond également à vos questions.

Timeout HTTP-Demande

Le temps est venu du premier octet client reçu, jusqu'à ce que le dernier octet soit envoyé au client (indépendamment de la conservation). Donc, si votre backend est trop lent ou si le client envoie sa demande trop lente, toute la communication peut prendre plus de temps que cela, et la demande est supprimée (et un délai d'attente envoyé au client).

délai d'attente HTTP-Keep-Alive

Le temps de conserver une connexion ouverte entre Haproxy et le client (après l'envoi de la réponse du client). Cela n'a rien à voir avec le temps de réponse du backend. Cela n'a rien à voir avec la longueur d'une seule demande (c'est-à-dire le délai d'expiration HTTP-Demand). Cela permet des réponses plus rapides si l'utilisateur demande plusieurs ressources (I.e. HTML, IMG et JS). Avec GARDER VIVANT, les demandes simples peuvent utiliser la même connexion TCP. De cette façon, la durée de charge d'une page Web complète est réduite.

Server Timeout

C'est le délai d'attente pour vos serveurs de backend. Une fois atteint, Haproxy répond avec 504 (timeout de la passerelle). Cela n'a également rien à voir avec GARDER VIVIVE, car il s'agit uniquement de la connexion entre le proxy et le backend.

16
edlerd