Maxim Dounin
November 06, 2020 04:54PM
Hello!

On Fri, Nov 06, 2020 at 11:28:16AM -0800, Nikita Koshikov wrote:

> Спасибо больше, Максим
>
> Хотелось бы уточнить насчет перехешированных ключей
> Вот конфигурация
> upstream backend {
> hash 'balance';
> server [::1]:81 weight=100 fail_timeout=60;
> server [::1]:82 weight=100 fail_timeout=60;
> server [::1]:83 weight=1 fail_timeout=60;
> server [::1]:84 weight=1 fail_timeout=60;
> }
>
> Ключ статический, соответственно все запросы должны повторять цепочку
> отказов, однако на практике происходит так:
> 81->82 или 82->81 - пока кто-нибудь из них жив. Когда оба недоступны
> один и тот же запрос балансирует 83/84/83/84...
> Количество в данном примере 4 и не должно попадать под критерий 20+.
> Это баг или мое недопонимание как должен работать hash в данном
> конкретном примере ? (nginx/1.16.1)

Сколько в данном примере было попыток рехэширования - мы не знаем,
так как при рехэшировании никто не гарантирует, что мы попадём на
работающий бэкенд. Если мы снова попадаем на неработающий и/или
испробованныый в рамках конкретного запроса бэкенд - происходит
ещё одно рехэширование.

В приведённом примере конфигурации после смерти бэкендов 81 и 82
вероятность попасть на "живой" бэкенд при очередном рехэшировании
около 1 процента, а с вероятностью 99% нам потребуется делать
рехэширование снова. Поскольку ограничение сработает на 20
попытках рехэширования - с вероятностью около 80% мы в это
ограничение уткнёмся и выбор бэкенда будет делаться с помощью
round-robin балансировки.

Резюмируя вышесказанное: нет, это не баг, это ровно то, про что
было сказано в предыдущем письме - устанете подбирать. Ибо с
одной стороны надо обеспечить нужную последовательнось выбора
бэкендов, а с другой - не выйти за ограничение в 20 попыток
рехэширования.

Если хочется всё-таки развлекаться - я бы смотрел в сторону
алгоритма "сделать десяток/сотню фиктивных серверов, посмотреть,
куда попадает запрос, и вписать нужные бэкенды на соответствующие
места". Но, повторюсь, гораздо более прямой способ задать порядок
явно - через error_page.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

upstream priority

Nikita Koshikov November 06, 2020 12:42PM

Re: upstream priority

Илья Шипицин November 06, 2020 12:54PM

Re: upstream priority

Nikita Koshikov November 06, 2020 01:18PM

Re: upstream priority

Илья Шипицин November 06, 2020 01:34PM

Re: upstream priority

Nikita Koshikov November 06, 2020 01:44PM

Re: upstream priority

Maxim Dounin November 06, 2020 01:50PM

Re: upstream priority

Nikita Koshikov November 06, 2020 02:30PM

Re: upstream priority

Maxim Dounin November 06, 2020 04:54PM

Re: upstream priority

Nikita Koshikov November 06, 2020 05:56PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 287
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready