<div dir="ltr"><div><div><div><div><div><div><div>Всем привет.<br><br></div>Столкнулся с интересным поведением директивы max_fails в upstream. <br>Версия nginx 1.2.6.<br>Опишу ситуацию.<br></div><br>1. Nginx работает на сервере some_host1. Кусок конфига:<br>
upstream fpm {<br>        server <some_host1>:9000 weight=6;<br>        server<some_host2>:9000 weight=4;<br>}<br></div>2. В какой-то момент some_host2 зависает (на уровне ОС), т.е. не отвечает на запросы. <br>
3. В логах появляются строки "connect() failed (110: Connection timed out) while connecting to upstream". Причем, я считал, что т.к. max_fails не указан, он равен 1, и, стало быть, таких строчек не должно быть, т.к. nginx должен перекидывать всех на первый сервер.<br>
</div>4. some_host2 перестартует. На нем запускается fpm.<br></div>5. Но почему-то строки из лога не пропадают и клиентам отдаются ошибки. <br></div>6. Если перестартовать nginx, то он подцепит оба сервера, и все продолжится в штатном режиме.<br>
</div><div><div><div><div><div><br><br></div><div>Вопросы:<br></div><div>1. Почему после первого неудачного раза сервер не отрубается? Ведь max_fails равно 1.<br></div><div>2. Почему после рестарта сервера nginx его не видит? Он же продолжает его дергать, и мог бы понять, что сервер восстановился.<br>
<br></div><div>Или, может, это нужно реализовывать другими способами? Переменные там другие выставлять или еще что?<br></div></div></div></div></div></div>