Тайм-ауты HAProxy через 1-2 минуты загрузки

Я переключаю нашу балансировку веб-нагрузки с Nginx на HAProxy. В настоящее время наша установка отлично работает в nginx, но мы хотим быть более избыточными с проверкой служб. Наш бэкэнд - это приложение Golang.

Для простоты мы используем только один сервер HAProxy с довольно простой конфигурацией, но кажется, что примерно через 1-2 минуты загрузки клиенты сообщают о тайм-аутах отправки в приложение. У нас довольно маленький тайм-аут (100 мсек), но это весь локальный трафик, и приложение обычно отвечает в течение 2-3 мсек.

Однако, мы делаем около 2k сообщений в секунду на нашей платформе, поэтому я сделал несколько небольших настроек Linux, чтобы отключить TCP-соединения. Может, я что-то здесь упускаю.

Вот простой поток этих запросов. Все они находятся в нашем центре обработки данных.

запросчик -> локальный сервер nginx (маршрутизатор) -> haproxy -> серверы приложений

/etc/sysctl.conf
# Decrease TIME_WAIT seconds
net.ipv4.tcp_fin_timeout = 30

# Recycle and Reuse TIME_WAIT sockets faster
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

Вот наша конфигурация haproxy. Здесь нет ничего сумасшедшего.

global
  ca-base  /etc/ssl/certs
  crt-base  /etc/ssl/private
  log  127.0.0.1   local0
  log  127.0.0.1   local1 notice
  ssl-default-bind-ciphers  ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
  ssl-default-bind-options  no-sslv3
  stats  socket /run/haproxy/admin.sock mode 660 level admin
  stats  timeout 30s

defaults
  errorfile  400 /etc/haproxy/errors/400.http
  errorfile  403 /etc/haproxy/errors/403.http
  errorfile  408 /etc/haproxy/errors/408.http
  errorfile  500 /etc/haproxy/errors/500.http
  errorfile  502 /etc/haproxy/errors/502.http
  errorfile  503 /etc/haproxy/errors/503.http
  errorfile  504 /etc/haproxy/errors/504.http
  mode  http
  option  httplog
  option  dontlognull
  timeout  connect 5000
  timeout  client 50000
  timeout  server  50000

frontend http-in
  bind *:80
  default_backend data_api

backend data_api
  option httpchk GET /status/version
  server gopp1 10.10.85.3:8000 check
  server gopp2 10.10.85.4:8000 check
  server gopp3 10.10.85.5:8000 check
  stats enable
  stats hide-version
  stats scope .
  stats uri /admin?stats
  stats realm   Haproxy\ Statistics
  stats auth    admin:secret
  stats admin   if TRUE
0
задан 14 May 2016 в 03:37
1 ответ

Какое у вас максимальное значение в HAProxy? Также, проверьте ваш maxsock в интерфейсе HAProxy Stats (обычно значение ulimit -n), чтобы убедиться, что у вас не закончились файловые дескрипторы.

Мы загрузили до 400,000 RPM (примечание: не используйте SSL Offload). Вот наш конфигурационный файл haproxy, ничего особенного, связанного с производительностью во фронтендах/бэкендах.

 global
    log       127.0.0.1 local2
    chroot    /var/lib/haproxy
    pidfile   /var/run/haproxy.pid
    maxconn   25000
    user      haproxy
    group     haproxy
    daemon

    spread-checks 4
    tune.maxrewrite 1024

defaults
  mode                    http
  log                     global
  option                  httplog
  option                  dontlognull
  option http-server-close
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 25000

Вот что мы используем для параметров ядра.

net.ipv4.ip_nonlocal_bind=1
net.ipv4.ip_local_port_range = 1025 65534
net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 10000
fs.file-max = 65536
fs.nr_open = 65536

Также установите /etc/security/limits.conf, чтобы разрешить 65536 файловых дескрипторов.

haproxy           soft    nofile          63536
haproxy           hard    nofile          63536
root              soft    nofile          63536
root              hard    nofile          63536
0
ответ дан 5 December 2019 в 10:24

Теги

Похожие вопросы