Re: Маршрутизация запросов

Ekaterina Kukushkina ek на nginx.com
Ср Июл 29 06:40:37 UTC 2015


Привет.

On Wed, Jul 29, 2015 at 01:43:11AM -0400, Budulianin wrote:
> >Но hash же не гарантирует равномерного распределения запросов по бэкендам,
> >он как раз гарантирует, что запросы с одинаковым id будут идти на одну и
> ту
> >же ноду.
> 
> А где-то описывается алгоритм работы hash?
> Чтобы можно было понять наверняка, всегда ли с одним id на одну и туже ноду
> или нет.
> Я конечно проверю, но ещё хотелось бы что-то в документации прочитать по
> этому поводу.

Hash (как и другие алгоритмы баллансировки) учитывает состояние апстрима. 
И если апстрим не доступен, то для маршрутизации запроса будет выбран один 
из оставшихся. 

Недоступным апстрим может считаться по нескольким причинам: не ответил в 
течение заданного таймаута, ответил, но nginx оценил его ответ как 
невалидный. Это конфигурируется с помощью директивы proxy_next_upstream. 

Также обратите внимание на директиву max_fails. Хоть она и не фигурирует в 
вашей конструкции, но тем не менее присутствует в виде 'max_fails=1'. 
При каждом неуспешном ответе (или неответе в установленное время) nginx 
будет помечать указанный сервер как недоступный (на 10 секунд по 
умолчанию). И в этом случае nginx заново выберет актуальный апстрим для 
указанного хэша и будет использовать его до тех пор пока он жив.
 
Для того чтобы это подтвердить, рекомендую посмотреть error_log на предмет 
таймаутов от апстрима (они видны на уровне error). Также можно в access_log 
добавить пременные $upstream_status и $upstream_addr. В этом случае в 
access_log'е будут видны переходы с следующему апстриму.

-- 
Ekaterina Kukushkina



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