O Haproxy precisa ser reiniciado a cada 2 horas

3

Eu configurei dois servidores haproxy dedicados para distribuir a carga em três servidores de aplicativos. Eu configurei o balanceamento http 80 normal e também um especial para trabalhar com websockets.

Funciona muito bem por cerca de duas horas, mas depois disso fica muito lento, uma carga de página é de cerca de 30 segundos. Quando eu reinicio haproxy está bom novamente.

Abaixo está o meu conf. Alguma idéia do que pode estar causando isso?

global
  user haproxy
  group haproxy

defaults
  mode http
  timeout connect 5s
  timeout client  5s
  timeout server  60s
  stats enable
  stats auth aa:bb

frontend proxy
   # listen on 80
  bind 0.0.0.0:80

  # allow for many connections, with long timeout
  maxconn 200000 # total maximum connections, check ulimit as well
  timeout client 24h

  # default to webapp backend
  default_backend webapp

  # is this a socket io request?
  acl is_websocket hdr_end(host) -i node.domain.com
  use_backend websocket if is_websocket

backend webapp
   balance roundrobin # assuming that you don't need stickiness
   # allow client connections to linger for 5s
   # but close server side requests to avoid keeping idle connections
  option httpchk HEAD /check.txt HTTP/1.0
  option http-server-close
  option forwardfor

  server app1 x.y.149.133:80 cookie app1 weight 10 check
  server app2 x.y.149.134:80 cookie app2 weight 15 check
  server app3 x.y.149.135:80 cookie app3 weight 15 check

backend websocket
  balance source

  # options
  option forwardfor # add X-Forwarded-For

  # Do not use httpclose (= client and server
  # connections get closed), since it will close
  # Websockets connections
 no option httpclose

 # Use "option http-server-close" to preserve
 # client persistent connections while handling
 # every incoming request individually, dispatching
 # them one after another to servers, in HTTP close mode
 option http-server-close
 option forceclose

 server app1 x.y.149.133:3000 cookie app1 weight 10 check
 server app2 x.y.149.134:3000 cookie app2 weight 15 check
 server app3 x.y.149.135:3000 cookie app3 weight 15 check
    
por Chrille 31.07.2012 / 22:20

1 resposta

1

O que geralmente torna os websockets diferentes do seu loadbalancing diário é o fato de que você acaba tendo uma alta quantidade de conexões simultâneas em comparação com a taxa de chegada. Essa é uma distinção importante nos sistemas, portanto, se não estiver claro, dê uma olhada nesta resposta minha .

Então, seja qual for o seu problema, meu palpite é que isso ocorre quando você atinge um certo limite de conexões simultâneas . Aqui está o meu melhor palpite com base nas informações que você forneceu:

Os sockets da Web de back-end contêm três servidores. O balanceador de carga fala com todos eles do mesmo IP. Isso significa que você tem um total de IPs de destino source_port_range *. Isso parece algo como:

[root@ny-kbrandt01 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000
[root@ny-kbrandt01 ~]# echo $(( (61000-32768) * 3 ))
84696

Então, quando você acessa algo em torno de 84k conexões, suas instâncias haproxy são carentes de portas de origem, picos de CPU, como acontece com a coleta de lixo para encontrar mais portas de origem.

Se não for, aposto que é algo nesse beco, monitore suas conexões simultâneas usando a página de estatísticas do haproxy e monitore sua CPU para entender melhor o que está acontecendo quando as coisas ficam lentas.

    
por 12.06.2014 / 18:23

Tags