On Wed, Sep 02, 2015 at 05:55:49AM -0400, xore wrote: > Добрый день. > > Не могу понять поведение nginx при возникновении ошибки: > "no live upstreams while connecting to upstream, client: x.x.x.x, ..." > > Я предполагал, что когда все серверы в upstream становятся недоступными, > nginx начинает отвечать 502, пока у какого-то сервера не кончится > fail_timeout. > Но практика показывает, что после ошибки "no live upstreams", nginx > продолжает отправлять запросы на серверы в upstream. > Не подскажут ли знающее люди, почему так?
http://hg.nginx.org/nginx/file/281863981d0b/src/http/ngx_http_upstream_round_robin.c#l497 > > Тестировал командой: > 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, > ... > > Думаю "какого черта, он в продолжает посылать запросы, если нет живых > серверов?". > Буду рад, если объясните, как так получается. > > Posted at Nginx Forum: > http://forum.nginx.org/read.php?21,261379,261379#msg-261379 > > _______________________________________________ > nginx-ru mailing list > [email protected] > http://mailman.nginx.org/mailman/listinfo/nginx-ru _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
