Не понятна логика работы 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