Welcome! Log In Create A New Profile

Advanced

Поведение nginx после ошибки "no live upstreams"

September 02, 2015 05:55AM
Добрый день.

Не могу понять поведение nginx при возникновении ошибки:
"no live upstreams while connecting to upstream, client: x.x.x.x, ..."

Я предполагал, что когда все серверы в upstream становятся недоступными, nginx начинает отвечать 502, пока у какого-то сервера не кончится fail_timeout.
Но практика показывает, что после ошибки "no live upstreams", nginx продолжает отправлять запросы на серверы в upstream.
Не подскажут ли знающее люди, почему так?

Тестировал командой:
siege -t 10S -c 10 -b -v 'http://server/url'

Конфиг:
upstream test_backend {
server test1:5020;
server test2:5020;
server test3:5020;
server test4:5020;
keepalive 128;
}

server {
...

location / {
proxy_pass http://test_backend;
proxy_next_upstream error timeout http_503;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}

На серверах, указанных в upstream, крутится python сервис через uwsgi.
nginx хочет keepalive и пытается посылать много запросов в одном TCP соединении.
А у uwsgi keepalive не включен, поэтому он принимает только один запрос и закрывает TCP соединение.
Соответственно, nginx получает отлуп (в виде RST пакета) на каждый второй запрос в TCP соединении.
Отсюда возникает много ошибок "recv() failed" и "upstream prematurely closed connection".
При таком поведении, у nginx в upstream должны очень быстро кончаться живые серверы и он должен переставать отвечать на запросы.

Смотрю в лог:

2015/09/02 12:23:46 [error] 6978#6978: *27035 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6978#6978: *27095 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6978#6978: *27285 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6979#6979: *27295 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6980#6980: *27391 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6980#6980: *27423 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6979#6979: *27545 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6984#6984: *27761 upstream prematurely closed connection while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6984#6984: *27761 no live upstreams while connecting to upstream, client: x.x.x.x, ...
2015/09/02 12:23:46 [error] 6984#6984: *27780 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:47 [error] 6984#6984: *27938 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:47 [error] 6984#6984: *27962 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:47 [error] 6980#6980: *28090 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...
2015/09/02 12:23:47 [error] 6980#6980: *28140 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, ...

Думаю "какого черта, он в продолжает посылать запросы, если нет живых серверов?".
Буду рад, если объясните, как так получается.
Subject Author Posted

Поведение nginx после ошибки "no live upstreams"

xore September 02, 2015 05:55AM

Re: Поведение nginx после ошибки "no live upstreams"

Vladimir Homutov September 02, 2015 06:16AM

Re: Поведение nginx после ошибки "no live upstreams"

xore September 02, 2015 07:00AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 71
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready