Несколько серверов Nginx загружаются, балансируют тот же IP-адрес к тому же бэкенду с ip_hash директивой?

Я видел, что это происходит прежде 3 или 4 раза, когда пользователь просто закрыл их сеанс вместо того, чтобы выйти из него. Попробуйте вещи в статье KB выше в соответствии с ответом JohnThePro.

4
задан 13 April 2017 в 15:14
2 ответа

Серверы Nginx не знают друг друга с их собственными таблицами ip_hash. Таким образом, конкретный сервер будет направлять трафик на бэкэнд на основе своего собственного пула ip_hash. Любая согласованность между интерфейсными серверами Nginx могла бы быть чисто случайной.

На практике это может быть менее серьезной проблемой, потому что DNS клиента вряд ли изменится во время их сеанса. В результате они попадут на один и тот же интерфейсный сервер и будут перенаправлены на один и тот же внутренний сервер.

Другой подход к этому - использовать что-то вроде HAProxy, который может балансировать по ряду показателей, например, как параметр URL . Ваше приложение может установить параметр, чтобы гарантировать, что клиент будет перенаправлен на тот же сервер. Конечно, предпочтительнее нормализовать данные через бэкэнд с помощью распределенного инструмента, но с устаревшими приложениями это может быть проблематично.

1
ответ дан 3 December 2019 в 04:12

Согласно документации:

Ключ для хеш-функции - это сетевой адрес класса C или весь IPv6-адрес клиента.

Итак, теоретически это должно работать.

Другая проблема, которая может возникнуть, - это отказ одного из ваших бэкэндов. Nginx не дает никаких обещаний относительно того, к какому бэкэнду клиент обратится дальше.

Но да, HAProxy ftw.

0
ответ дан 3 December 2019 в 04:12

Теги

Похожие вопросы