HAProxy отклоняет соединения с низким потреблением ресурсов

У меня проблемы с моими серверами haproxy, которые отклоняют новые соединения (или время их отключения) после определенного порога. Прокси-серверы - это AWS c5.large EC2 с 2 процессорами и 4 ГБ оперативной памяти. Одна и та же конфигурация используется для обоих типов подключения на нашем сайте, у нас есть одна для подключений через веб-сокеты, которые обычно имеют от 2K-4K одновременных подключений и скорость запросов около 10 / с . Другой - для обычного веб-трафика с nginx в качестве бэкэнда с примерно 400-500 одновременными подключениями и скоростью запросов примерно 100-150 / с . Типичное использование ЦП для обоих составляет около 3-5% в процессе haproxy, с 2-3% памяти, используемой для прокси-сервера websocket (40-60 МБ) и 1–3% памяти, используемой для веб-прокси (30–40 МБ).

Согласно прилагаемой конфигурации, процессоры отображаются на обоих процессорах, при этом выполняется один процесс и два потока. Оба типа трафика обычно составляют 95% (или выше) SSL-трафика. Я просмотрел информацию о прокси с помощью watch -n 1 'echo "show info" | socat unix: /run/haproxy/admin.sock - ', чтобы увидеть, не достигаю ли я каких-либо из моих пределов, что, похоже, не так.

Во время высокого трафика и когда мы начинаем см. проблемы, это когда количество одновременных подключений нашего веб-сокета достигает примерно , а скорость веб-запросов достигает 400 запросов / с . Я упоминаю здесь оба сервера, потому что знаю, что конфигурация может обрабатывать высокие одновременные соединения и частоту запросов, но мне не хватает какого-то другого лимита ресурсов. В нормальных условиях все работает нормально; однако проблемы, которые мы видим, это ошибки типа ERR_CONNECTION_TIMED_OUT (из хрома). Никогда не вижу ошибок 502. Я также не вижу, чтобы какой-либо другой процесс использовал больше ЦП или памяти на сервере. Я также прикрепляю некоторые другие, возможно, относящиеся к делу конфигурации, такие как установка моих ограничений и настроек sysctl.

Есть идеи, что мне может не хватать? Я читаю top и ps aux | grep haproxy неправильно и видите неправильное использование процессора / памяти? Мне не хватает ограничения на TCP-соединение? Бэкэнд-серверы (nginx / websocket) работают,но, кажется, никогда не облагаются налогом. Мы протестировали их с гораздо большим количеством подключений и трафика и ограничены прокси задолго до того, как мы ограничим внутренние серверы.

Большое спасибо.

haproxy.cfg :

global
    ulimit-n 300057
    quiet
    maxconn 150000
    maxconnrate 1000
    nbproc 1
    nbthread 2
    cpu-map auto:1/1-2 0-1

    daemon
    stats socket /run/haproxy/admin.sock mode 600 level admin
    stats timeout 2m
    log 127.0.0.1:514 local0
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private
    ssl-default-bind-options no-sslv3 no-tlsv10
    ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL:!RC4

defaults
    maxconn 150000
    mode http
    log global
    option forwardfor
    timeout client 30s
    timeout server 120s
    timeout connect 10s
    timeout queue 60s
    timeout http-request 20s

frontend default_proxy
    option httplog
    bind :80
    bind :443 ssl crt /etc/haproxy/ssl.pem
    ... acl stuff which may route to a different backend
    ... acl for websocket traffic
    use_backend websocket if websocket_acl
    default_backend default_web

backend default_web
    log global
    option httpclose
    option http-server-close
    option checkcache
    balance roundrobin
    option httpchk HEAD /index.php HTTP/1.1\r\nHost:website.com
    server web1 192.168.1.2:80 check inter 6000 weight 1
    server web2 192.168.1.3:80 check inter 6000 weight 1

backend websocket
    #   no option checkcache
    option httpclose
    option http-server-close
    balance roundrobin
    server websocket-1 192.168.1.4:80 check inter 6000 weight 1
    server websocket-2 192.168.1.5:80 check inter 6000 weight 1

Вывод из ] haproxy -vv :

HA-Proxy version 1.8.23-1ppa1~xenial 2019/11/26
Copyright 2000-2019 Willy Tarreau <willy@haproxy.org>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -O2 -fPIE -fstack-protector-strong -Wformat -    Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -Wdeclaration-after-statement -fwrapv -Wno-unused-label
OPTIONS = USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_LUA=1 USE_SYSTEMD=1 USE_PCRE2=1 USE_PCRE2_JIT=1 USE_NS=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Built with OpenSSL version : OpenSSL 1.0.2g  1 Mar 2016
Running on OpenSSL version : OpenSSL 1.0.2g  1 Mar 2016
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2
Built with Lua version : Lua 5.3.1
Built with transparent proxy support using: IP_TRANSPARENT         IPV6_TRANSPARENT IP_FREEBIND
Encrypted password support via crypt(3): yes
Built with multi-threading support.
Built with PCRE2 version : 10.21 2016-01-12
PCRE2 library supports JIT : yes
Built with zlib version : 1.2.8
Running on zlib version : 1.2.8
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with network namespace support.

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

Available filters :
    [SPOE] spoe
    [COMP] compression
    [TRACE] trace

limits.conf :

* soft nofile 120000
* soft nproc 120000

sysctl.conf :

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 50000
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 50000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.netdev_max_backlog = 50000
fs.epoll.max_user_instances = 10000

Обычно при нагрузке 330 одновременных подключений и 80 запросов / с ps aux | grep haproxy вывод:

root      8122  4.5  1.2 159052 46200 ?        Ssl  Jan28  40:56 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -sf 29790
root     12893  0.0  0.3  49720 12832 ?        Ss   Jan21   0:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -sf 29790

и ОС - Ubuntu 16.04.

0
задан 30 January 2020 в 04:50
1 ответ

Hay nivadika tamiko foana ny valiny nandritra ny fotoana rehetra. Nametraka ny maxconnrate ho 1 000 aho. Na izany aza, fampahalalana fampisehoana dia naneho ny tahan'ny fifandraisana ambany kokoa eo anelanelan'ny 10-15, ka tsy nieritreritra aho hoe tonga tamin'io fetra io. Tsy nahavita afa-tsy fangatahana 500 s / fara fahakeliny aho (nohamafisin'ny mpizara backend ahy), isaky ny fangatahana mitaky fifandraisana iray amin'ny mpanjifa, ary ny faharoa amin'ny backend. Noho izany, nampiasa fifandraisana 1.000 isan-tsegondra aho.

Nesoriko io fetra io ary afaka nitana ny tahan'ny fifandraisana ambony aho.

0
ответ дан 26 February 2020 в 00:44

Теги

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