алгоритм балансировки

Mykola Zubach zuborg at advancedhosters.com
Mon Jan 22 21:23:16 MSK 2007


On Mon, 22 Jan 2007 20:23:27 +0300
Anton Yuzhaninov <citrin at citrin.ru> wrote:

> Hello Mykola,
> 
> MZ> Проблема не в кол-ве серверов, а в том что если один из них вылетает,
> MZ> на остальные нагрузка не пойдет в течении таймаута коннекта, пока nginx
> MZ> не убедится, что установить соединение к вылетевшему серверу не удастся.
> 
> Если есть два бэкенда и один из них упал, то половина запросов будет
> по прежнему идти на работающий бэкенд, а половина будет висеть в
> ожидании таймаута на коннект. Его бэкендов больше одного, то его имеет
> смысл делать небольшим - от 3 до 5 секунд.

Все не так. Если есть несколько бекендов, запросы распределяются
поровну, в режиме round-robin. Если один из них упал -
nginx в течении timeout пытается к нему присоединиться чтобы форварднуть
запрос, после истечения таймаута сервер помечается как down и все
запросы посылаются на рабочий (е) бекенды, но в течении этого таймаута,
пока nginx пытается к нему коннектиться, новые запросы вообще никуда не
форвардятся - round-robin сему виной. Потом nginx ждет этот же таймаут и
опять начинает пытаться подключиться к лежащему бекенду и все
повторяется.

http://sysoev.ru/nginx/docs/http/ngx_http_upstream.html

> 
> При этом чем больше используется бэкендов, тем меньше запросов будут
> ожидать таймаут.
> Например если есть 10 бэкендов, то 10% запросов будут висть в ожидании
> таймаута, а 90% будут сразу уходить на работающие бэкенды.
> 
> -- 
>  Anton Yuzhaninov.
> 





More information about the nginx-ru mailing list