Conexão SSL HAProxy

5

Estamos usando HA-Proxy version 1.5.11 2015/01/31 e, de ontem, notamos que toda a solicitação para nosso serviço por meio de https é muito lenta. No Chrome Developer Console, podemos ver os seguintes horários:

Initial Connection 7.59s
SSL 6.42s

Testamos as estatísticas do soquete

# ss -s
Total: 2080 (kernel 2088)
TCP: 2674 (estab 2141, closed 433, orphaned 84, synrecv 0, timewait 433/0), ports 0

Portanto, é bem abaixo de 65k portas possíveis.

A seguir está o nosso haproxy.cfg

# Global configuration
global
  log 127.0.0.1 local0 notice
  maxconn 50000
  stats socket /tmp/proxystats level admin
  tune.ssl.default-dh-param 2048
  #user deploy
  #group deploy
  #daemon
  tune.bufsize 32768

# Default configuration
defaults
  log global
  mode http
  option httplog
  option dontlognull
  stats enable
  stats uri /proxystats
  stats auth username:pass
  stats realm Haproxy\ Statistics
  stats refresh 5s
  timeout connect 120000
  timeout client 120000
  timeout server 120000
  option redispatch
  option forwardfor
  option http-server-close
  errorfile 500 /etc/haproxy/errors/503.http
  errorfile 502 /etc/haproxy/errors/503.http
  errorfile 503 /etc/haproxy/errors/503.http

# HTTP frontend configuration
frontend http
  mode http
  bind *:80
  #redirect scheme https if !{ ssl_fc }
  redirect prefix https://myservice.com code 301 if { hdr(host) -i myservice.com }
  acl www       hdr(host) -i www.myservice.com
  acl api       hdr(host) -i api.myservice.com
  acl browser   hdr(host) -i br-rx.myservice.com
  use_backend api_server if www
  use_backend api_server if api
  use_backend browser_receiver if browser


# HTTPs frontend configuration
frontend https
  mode http
  bind *:443 ssl crt <our .com pem> crt <second domain pem> crt <third domain pem>
  redirect prefix https://www.myservice.com code 301 if { hdr(host) -i myservice.com }
  use_backend api_server if { ssl_fc_sni www.myservice.com }
  use_backend api_server if { ssl_fc_sni api.myservice.com }
  use_backend browser_receiver if { ssl_fc_sni br-rx.myservice.com }

A CPU e a memória dentro do sistema são normais. CPU 9.3%, MEM: 335MB

Onde mais podemos começar a procurar?

    
por Sundar 21.10.2015 / 13:51

1 resposta

4

Dado que o Chrome reporta tempos de configuração extremamente elevados connection , significa que os pacotes SYN estão a ser ignorados ou, pelo menos, não estão a ser respondidos. Isso pode acontecer em três situações:

  • perdas de pacotes: você pode querer garantir que o seu link de internet ainda está OK e que este servidor específico tem conectividade correta (sua placa de rede pode estar morta)
  • backlog full, isso acontece se haproxy estiver demorando para aceitar conexões e resultar em muitas conexões SYN_RECV, mas como você não tem nenhuma delas, não é o caso;
  • conntrack ajustada incorretamente, causando a queda de conexões de entrada. Eu tenderia a votar em um dado que as pessoas implantam balanceadores de carga em sistemas sem ajustá-los e esse problema é bastante frequente. Por favor, pelo menos, verifique os logs do sistema usando "dmesg" e procure por vários erros, qualquer mensagem net_ratelimit ou qualquer mensagem "conntrack table full".

Edit: Estou apenas percebendo que você só mudou a configuração maxconn global, mas não a padrão, então seus frontends ainda estão limitados a 2000 conexões simultâneas (verifique com haproxy -vv). E o seu netstat parece indicar que você não está muito longe desse limite, então pode ser um dos motivos. Por favor, adicione uma diretiva maxconn na sua seção de padrões.

    
por 21.10.2015 / 22:45

Tags