Высокое количество соединений между фронт-ендами и биддерами

Panichev Oleg panichev на segmento.ru
Пт Мар 29 07:37:47 UTC 2019


Привет!


Проблема — высокое число timewait коннекшнов между nginx-proxy и 
бэкендами (до 30-40к), уровень трафика — десятки тысяч запросов в 
секунду извне, в основном короткие сессии на несколько запросов. Стек 
Centos 6 настроен на переиспользование tw sockets - tw_reuse=1, 
tcp_fin_timeout низкий (2с).



nginx/1.14.0, ~ 25 fastcgi backends

upstream all {
hash $shard_key consistent;
server server10.local:9988 max_fails=0 fail_timeout=1s weight=100;
server server11.local:9988 max_fails=0 fail_timeout=1s weight=100;
..
..
..
server server33.local:9988 max_fails=0 fail_timeout=1s weight=100;
server server34.local:9988 max_fails=0 fail_timeout=1s weight=100;
keepalive 100;
}

   fastcgi_pass all;
   fastcgi_keep_conn on;
   fastcgi_next_upstream off;
   fastcgi_buffers 16 16k;
   fastcgi_buffer_size 32k;
   fastcgi_connect_timeout 20ms;
   fastcgi_read_timeout 75ms;
   fastcgi_intercept_errors on;
   error_page 500 501 502 503 504 = $failover;


Вероятно, высокое количество TW соединений вызвано поведением-настройкой 
Nginx, а именно необходимостью слать заглушку при достижении read 
timeout до апстрима (75мс), в этом случае Nginx закрывает соединение с 
апстримом принудительно (TCP RST), шлет фэиловер респонс клиенту и 
переоткрывает его снова. Мы видим около 30-35 RST пакетов в секунду в 
направлении бэкендов от Nginx, что соотвествует числу фейловеров в 
секунду по тому же апстриму согласно access/error.log.

Вопрос — верны ли рассуждения о причинах высокого числа TW соединений 
между прокси и бэкендами и как их можно уменьшить средствами нжинкс, 
если это возможно?

Спасибо

--

С уважением, Олег

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20190329/08dfaf33/attachment.html>


Подробная информация о списке рассылки nginx-ru