Re: Ошибки в логах: no live upstreams while connecting to upstream

Maxim Dounin mdounin на mdounin.ru
Чт Авг 18 14:25:33 UTC 2011


Hello!

On Thu, Aug 18, 2011 at 10:14:02AM -0400, toootooo wrote:

> Доброе время суток!
> 
> Конфигурация сети следующая: 
>   1. frontand nginx 
>   2. backend тоже 2 -а nginx сервера,
> 
> Иак вот, на первом  сервере в логе часто,
> валятся ошибки такого вида:
> 
> 2011/08/18 10:07:32 [error] 23884#0: *857809852 no live upstreams while
> connecting to upstream, client: <client_ip> server: <backendN-name>,
> request: "GET /./Packages.bz2 HTTP/1.1", upstream:
> "http://upstreams/./Packages.bz2", host: "somehost"

Это значит, что оба бекенда признаны мёртвыми из-за ранее 
случившихся ошибок.  Можно потюнить max_fails/fail_timeout[1], но 
вообще говоря вам надо решать проблему с бекендами: разбираться, 
почему сыпятся ошибки, и делать так чтобы их не было.

[1] http://sysoev.ru/nginx/docs/http/ngx_http_upstream.html#server

>   конфиг по-умолчанию frontend-а 
>   upstream {
>      backend1_IP:90;
>      backend2_IP:120;
>   }
>     server {
>         listen     frontend-IPn:80;
>         server_name  backendN-name;
>         location / {
>             proxy_pass  http://upstreams;
>             proxy_set_header  Host       $host;
>             proxy_set_header  X-Forwarded-For  $remote_addr;
>         }   
>     }
> 
> 
> конфигурация backend:
> 
>     server {
>         listen       backend1_IP:90;
>         server_name  localhost;
>         location / {
>             perl  ncrewrite::handler2;

А соответствующий обработчик случайно не занимается какими-либо 
блокирующимися операциями (e.g. ходит в базу)?  Если занимается - 
то эффект понятен: на время соответствующей операции блокируется 
весь рабочий процесс целиком, все запросы висят и некоторые 
таймаутятся...  В общем, не надо так делать.  А если делать - то 
очёнь тщательно тюнить количество рабочих процессов и 
распределение запросов между ними (как минимум - отключать 
accept_mutext).

>         }
>     }
> 
> Что посоветуете сделать? 
> хотелось бы, конечно, между ними frontend <-->
> backend http/1.1, но nginx не поддерживает с
> апстримом 1.1....

С патчами - поддерживает (тут пробегало), но врядли вам это поможет.

Maxim Dounin



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