timeout do servidor e tente novamente no HAProxy 502

1

Temos um problema estranho de HA Proxy. Embora tenhamos resolvido isso, não entendemos o porquê.

A configuração é muito básica: um balanceador de carga e um back-end do Apache. Nosso problema surge para uma solicitação http que leva 100 minutos em execução no Apache antes que qualquer saída seja enviada de volta.

Na primeira configuração, tivemos timeout server de 30 minutos. Nesse caso, um erro 504 foi apresentado pelo HAProxy, no log mostrado sH-- . De acordo com os documentos:

The "timeout server" stroke before the server could return its response headers.

Então aumentamos o servidor de tempo limite para 60 minutos. Desta vez conseguimos (após 100 minutos) um erro 502 e no log SH-- :

The server aborted before sending its full HTTP response headers, or it crashed while processing the request.

No começo, suspeitávamos que o Apache falhasse, mas depois notamos que, após 60 minutos, o Apache recebeu uma segunda solicitação do HAProxy, que não apareceu em nenhum arquivo de log. Será que o que aconteceu foi o seguinte:

  1. Solicite o envio para o HAProxy e, de lá, para o Apache
  2. Após 60 minutos, o HA Proxy decide que a conexão está incorreta e reenvia uma solicitação (eu acho que com uma porta de origem diferente). O Apache começa a processar este segundo pedido.
  3. Após 40 minutos, o Apache finaliza a primeira tentativa e envia os resultados de volta para o HAProxy. HAProxy fica confuso, pois é uma resposta da primeira tentativa, então ele aborta com um 502 e registra uma contagem de tentativas 0 (como vimos no log).

BTW Somente depois que aumentamos o servidor de tempo limite para 2 horas, a solicitação foi processada sem erros (nem tente novamente).

Configuração do HAProxy 1.5.9 Stripped:

global
   maxconn         4000     # Sets the maximum per-process number of concurrent connections.
   maxsslconn      1000     # Sets the maximum per-process number of concurrent SSL connections.
   maxcompcpuusage 95       # Sets the maximum CPU usage HAProxy can reach before stopping or decreasing the compression level.

defaults HTTP
   mode            http
   option          http-server-close        # Preserve client persistent connections while handling every incoming request individually, dispatching them one after another to servers, in HTTP close mode
   option          httplog
   option          forwardfor
   timeout connect 4s       
   timeout client  20s      
   timeout server  100s
   timeout http-request 20s  # Set the maximum allowed time to wait for a complete HTTP request
   maxconn         200
   default-server  inter 2s fall 6 rise 2 port 80

frontend dc2--fe
   bind            8.8.8.8:80 mss 1422
   default_backend dc2--active

backend dc2--active
   timeout server  7200s
   server          app37 10.0.0.97:80 check
    
por MarkR 03.02.2015 / 17:23

0 respostas