У меня есть сеть из одного сервера балансировки нагрузки (с использованием nginx) фунт1 который направляет трафик между четырьмя веб-серверами web1, web2, web3, web4. Эти четыре веб-сервера настроены на использование циклического перебора в nginx.
Все серверы настроены на max_fails = 1 и fail_timeout = 5 с, поэтому, когда сервер не работает, его следует довольно быстро игнорировать, если он не в сети.
Следует отметить, что среднее время отклика веб-страниц с каждого веб-сервера составляет около 50–150 мс, если все четыре веб-сервера находятся в сети. Проблема возникает, когда только ОДИН веб-сервер отключен. Когда один из них переходит в автономный режим и пользователь пытается загрузить другую страницу, время отклика варьируется от 50 мс до 25 с. Да, 25 секунды.
Я сбит с толку, потому что я бы подумал, что настройки round-robin и fail_timeout сделают так, чтобы автономный сервер игнорировался.
Дополнительные, возможно относящиеся к делу примечания: все четыре веб-сервера работают под управлением apache с php5, и memcached включен между четырьмя.
Кажется, вы неправильно поняли fail_timeout
параметр. Пожалуйста, перечитайте документация.
время, в течение которого должно произойти указанное количество неудачных попыток связи с сервером, чтобы сервер считался недоступным;
Параметр не ограничивает время каждой такой попытки, он о том, сколько из них должно произойти в течение указанного периода, чтобы сервер считался неработающим и перестал направлять на него запросы.
Ты должен настроиться proxy_connect_timeout
, proxy_send_timeout
и proxy_read_timeout
директивы и увеличение в fail_timeout
стоимость.