upstream priority

Nikita Koshikov koshikov на gmail.com
Пт Ноя 6 17:40:14 UTC 2020


Доброго всем времени суток

Подскажите как можно сделать что-то максимально подобное для выбора
backend сервера по приоритету, в идеале нужно что-то

  upstream backend {
    server [::1]:81 priority=1;
    server [::1]:82 priority=2;
    server [::1]:83 priority=3;
    server [::1]:84 priority=4;
    server [::1]:85 priority=5;
  }
т.е. пока жив хоть один с более высоким приоритетом - слать запросы на него ?

Из того что пробовал
  upstream backend {
    server [::1]:81 weight=1;
    server [::1]:83 backup;
  }
Так работает - однако не поддерживает 2+ бекенда

Из самого близкого что удалось сделать - через hash со статичным ключом
  upstream backend {
    hash 'http_balance';
    server [::1]:81 weight=1 fail_timeout=60;
    server [::1]:82 weight=2 fail_timeout=60;
    server [::1]:83 weight=3 fail_timeout=60;
  }
Проблема только что веса не всегда работают, - в данной конфигурации
выбирается server:82, хотя у 83 более высокий weight. Полная цепочка
при отказах - 82->83->81
Учитывается ли вес в такой конфигурации ?
С более высокими весами начинает работать как нужно 83->82->81
  upstream backend {
    hash 'http_balance';
    server [::1]:81 weight=1 fail_timeout=60;
    server [::1]:82 weight=10 fail_timeout=60;
    server [::1]:83 weight=100 fail_timeout=60;
  }
Хотелось бы понимать это совпадение или веса принимаются в расчет при
выборе hash-а?


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