Re: upstream max_fails и упавшие сервера

Андрей Урядов anuryadov at gmail.com
Mon Jun 17 13:59:15 UTC 2013


>>Если продолжают происходить ошибки - значит, он как-то странно
восстановился.  Возможно, у него в процессе поменялся ip-адрес?
>>Это бы объяснило, почему после рестарта nginx его "увидел".
Дело в том, что эти 2 сервера - aws-инстансы. Внешний ip-адрес у них
постоянный, а вот внутренний - может меняться. Т.к. у меня идет привязка к
внутренней aws-dns-службе. Так что вариант, что во внутренней сети и них
разные ip, вполне имеет почву.
А, если это так, можно ли что-то сделать на стороне nginx? Я же их
прописываю в конфиге по dns-адресам, а не ip. Или nginx внутри себя все
равно хранит представление в ip-адресе?


17 июня 2013 г., 17:56 пользователь Андрей Урядов <anuryadov at gmail.com>написал:

> Да
>
>
> 17 июня 2013 г., 17:53 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:
>
> Hello!
>>
>> On Mon, Jun 17, 2013 at 04:09:19PM +0400, Андрей Урядов wrote:
>>
>> > Всем привет.
>> >
>> > Столкнулся с интересным поведением директивы max_fails в upstream.
>> > Версия nginx 1.2.6.
>> > Опишу ситуацию.
>> >
>> > 1. Nginx работает на сервере some_host1. Кусок конфига:
>> > upstream fpm {
>> >         server <some_host1>:9000 weight=6;
>> >         server<some_host2>:9000 weight=4;
>> > }
>> > 2. В какой-то момент some_host2 зависает (на уровне ОС), т.е. не
>> отвечает
>> > на запросы.
>> > 3. В логах появляются строки "connect() failed (110: Connection timed
>> out)
>> > while connecting to upstream". Причем, я считал, что т.к. max_fails не
>> > указан, он равен 1, и, стало быть, таких строчек не должно быть, т.к.
>> nginx
>> > должен перекидывать всех на первый сервер.
>> > 4. some_host2 перестартует. На нем запускается fpm.
>> > 5. Но почему-то строки из лога не пропадают и клиентам отдаются ошибки.
>> > 6. Если перестартовать nginx, то он подцепит оба сервера, и все
>> продолжится
>> > в штатном режиме.
>> >
>> >
>> > Вопросы:
>> > 1. Почему после первого неудачного раза сервер не отрубается? Ведь
>> > max_fails равно 1.
>>
>> После того, как случилась ошибка - nginx будет посылать запросы на
>> "плохой" сервер раз в fail_timeout секунд (нюанс: из каждого
>> рабочего процесса).  Если он успешно ответит на запрос - то будет
>> вновь включён в работу.
>>
>> > 2. Почему после рестарта сервера nginx его не видит? Он же продолжает
>> его
>> > дергать, и мог бы понять, что сервер восстановился.
>>
>> Если продолжают происходить ошибки - значит, он как-то странно
>> восстановился.  Возможно, у него в процессе поменялся ip-адрес?
>> Это бы объяснило, почему после рестарта nginx его "увидел".
>>
>> --
>> Maxim Dounin
>> http://nginx.org/en/donation.html
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru at nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130617/7f14bc4f/attachment.html>


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