Не понятна логика работы hash consistent
Maxim Dounin
mdounin на mdounin.ru
Чт Окт 13 13:15:16 UTC 2022
Hello!
On Thu, Oct 13, 2022 at 11:52:42AM +0300, Александр Кунич via nginx-ru wrote:
[...]
> А подскажите ещё пожалуйста, строится ли отдельный круг ketama для
> серверов с меткой backup? Т.е. если в конфигурации будет указано
> несколько серверов с меткой backup, то запросы, приходящие на эти
> сервера будут тоже консистентными?
Формально backup-сервера вообще не поддерживаются при
использовании методов балансировки hash, ip_hash и random, см.
тут:
http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#backup
И если сначала задать метод балансировки, а потом уже описывать
сервера, то использовать флаг "backup" nginx не разрешит.
Если же сервера уже описаны к тому моменту, как задан метод
балансировки, и соответственно известно, что backup-сервера не
поддерживаются, в текущей реализации nginx такое пропускает. При
этом, опять же в текущей реализации, при hash-балансировке nginx
пытается делать до 20 попыток перехэширования для выбора сервера,
и если за эти 20 попыток он не смог найти работающий сервер - то
nginx переключается в режим round-robin-балансировки для выбора
хоть какого-то сервера из оставшихся (если хотя бы что-то
осталось). И уже в этом режиме срабатывают backup-сервера, если
они вдруг были заданы.
Соответственно, если вы задали backup-сервера при
hash-балансировке, то они будут использоваться только в рамках
перехода к round-robin-балансировке при невозможности выбрать
сервер с помощью hash-балансировки, и для выбора из
backup-серверов будет использоваться round-robin-балансировка. Но
по хорошему так делать не надо, это особенность реализации, а не
гарантированное поведение.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru