Temos dois httpd
servidores em execução em RHEL 6
por trás de um balanceador de carga de hardware
Estamos recebendo erros de tempo limite no nosso log de erros do httpd.
[Fri Feb 19 15:06:49.823372 2016] [proxy_http:error] [pid 15760] (70007)The timeout specified has expired: [client 172.X.X.187:48453] AH01095: prefetch request body failed to 172.X.X.210:21080 (host-x15) from 172.X.X.187 (), referer: http://www.example.com.au/secure/Book?cb=30938956188
[Fri Feb 19 15:07:37.113599 2016] [proxy_http:error] [pid 16312] (70007)The timeout specified has expired: [client 172.X.X.187:51600] AH01095: prefetch request body failed to 172.X.X.209:21080 (host-x14) from 172.X.X.187 (), referer: http://www.example.com.au/secure/Book?cb=182574845707719466206
No nosso caso, apache
está funcionando como load balancer
usando mod_balancer_mananger
. Havia tomcat
servidores atrás do apache load balancer
.
A preocupação para mim é o erro timeout
que estou vendo. Meu apache
está descartando conexões por acaso? No cenário acima, 172.X.X.187
é o loadbalancer do hardware ip. 172.X.X.210/209
são os IPs do servidor de aplicativos que estão por trás de apache load balancer
.
Verificando o sistema, posso ver muitas conexões TIME_WAIT do IP do balanceador de carga. Às vezes são mais de 600 conexões.
$ sudo netstat -anp | grep -i time | grep 172.X.X.187 | wc -l
621
$ sudo netstat -anp | grep -i estab | wc -l
681
O nosso limite de conexão está ficando esgotado devido aos parâmetros padrão do kernel TCP, conforme este link
$ cat /proc/sys/net/ipv4/tcp_fin_timeout
60
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
$ cat /proc/sys/net/ipv4/tcp_max_syn_backlog
4096
A configuração apache load balancer
é a seguinte
BalancerMember host-x14:21080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=host-x4
BalancerMember host-x15:21080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=host-x5
Por favor, sugira. Se você precisar de mais informações, por favor me avise.