Назад | Перейти на главную страницу

HAProxy SSL-соединение

Мы используем HA-Proxy version 1.5.11 2015/01/31, и со вчерашнего дня мы заметили, что все запросы к нашему сервису по https очень медленные. В консоли разработчика Chrome мы видим следующие тайминги:

Initial Connection 7.59s
SSL 6.42s

Мы протестировали статистику сокетов

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

Так что количество возможных портов значительно ниже 65 тыс.

Ниже представлен наш 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 }

ЦП и память в системе в норме. CPU 9.3%, MEM: 335MB

Где еще мы можем начать искать?

Учитывая, что Chrome сообщает очень много связь время установки, это означает, что пакеты SYN отбрасываются или, по крайней мере, не получают ответа. Это может произойти в трех ситуациях:

  • потеря пакетов: вы можете убедиться, что ваша интернет-ссылка все еще в порядке и что этот конкретный сервер имеет правильное подключение (его сетевая карта может быть мертвой)
  • backlog full, это происходит, если haproxy требуется время для приема соединений, и в результате возникает много соединений SYN_RECV, но поскольку у вас их нет, это не так;
  • неправильно настроенный conntrack, приводящий к разрыву входящих соединений. Я бы предпочел проголосовать за это, учитывая, что люди развертывают балансировщики нагрузки в системах, не настраивая их, и эта проблема возникает довольно часто. Пожалуйста, по крайней мере проверьте системные журналы с помощью "dmesg" и поищите различные ошибки, любые net_ratelimit или любые сообщения "conntrack table full".

Изменить: я просто понимаю, что вы изменили только глобальную настройку maxconn, но не настройку по умолчанию, поэтому ваши интерфейсы по-прежнему ограничены 2000 одновременными подключениями (проверьте с помощью haproxy -vv). И ваш netstat, кажется, указывает, что вы не слишком далеко от этого предела, так что это может быть одной из причин. Добавьте директиву maxconn в раздел настроек по умолчанию.