реализация алгоритма балансировки
Maxim Dounin
mdounin at mdounin.ru
Fri Apr 24 19:30:00 MSD 2009
Hello!
On Fri, Apr 24, 2009 at 06:35:05PM +0400, Михаил Монашёв wrote:
> Здравствуйте, Максим.
>
> >> Есть апстрим:
> >>
> >> upstream my_backend {
> >> server 10.0.0.1:80 weight=1
> >> max_fails=20 fail_timeout=3s;
> >> server 10.0.0.4:80 weight=5000
> >> max_fails=1000 fail_timeout=3s;
> >> server 10.0.0.6:80 weight=16000
> >> max_fails=1000 fail_timeout=3s;
> >> server 10.0.0.4:80 backup;
> >> server 10.0.0.6:80 backup;
> >> }
> >>
> >> Правильно ли я понимаю, что в таком конфиге запросы пойдут следующим
> >> образом: 1 запрос на 10.0.0.1:80, потом 5000 запросов на 10.0.0.4:80,
> >> потом 16000 запросов на 10.0.0.6:80?
>
> MD> Нет. Веса сейчас работают приблизительно так: nginx ходит по кругу,
> MD> уменьшая каждый раз вес на 1 и пропуска бекенды с нулевым весом.
> MD> Когда у всех бекендов вес становится нулевым - возвращаются
> MD> исходные значения весов и всё повторяется.
>
> MD> Т.е. в отсутствии ошибок от бекендов будет как-то так:
>
> MD> 1 на .1
> MD> 10000 по очереди между .4 и .6
> MD> 11000 на .6.
>
> Этот алгоритм получше, но всё таки не идеальный. С одним воркером на
> 10.0.0.6 периодически будет приходить подряд много запросов. Хотя в
> идеале, должно размазываться по времени более равномерно.
>
> А в 0.6.31 так как ты описал или там какой-то другой алгоритм? Я
> просто выдвинул своё предположение по наблюдениям за работой 0.6.31.
Нет, я гоню. Начиная с 0.6.6 появилась другая алгоритмика, и с
тех пор всё не так как написано выше.
Должно распределять запросы, сохраняя соотношение между текущими
весами. Т.е. в твоём случае это будет как-то так:
1 запрос на .1
всё остальное - 1 запрос на .4, потом 3 запроса на .6
В 0.6.31 должно быть также.
Maxim Dounin
>
> --
>
> С уважением,
> Михаил Монашёв, SoftSearch.ru
> mailto:postmaster at softsearch.ru
> ICQ# 166233339
> http://michael.mindmix.ru/
> Без бэкапа по жизни.
>
>
More information about the nginx-ru
mailing list