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:
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