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

Андрей Урядов anuryadov at gmail.com
Mon Jun 17 12:09:19 UTC 2013


Всем привет.

Столкнулся с интересным поведением директивы 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.
2. Почему после рестарта сервера nginx его не видит? Он же продолжает его
дергать, и мог бы понять, что сервер восстановился.

Или, может, это нужно реализовывать другими способами? Переменные там
другие выставлять или еще что?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130617/55421eb5/attachment.html>


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