Для балансирования нагрузки можно раздавать приоритеты. Лично я тендирую
использовать все сервера, но бэкапные с меньшим приоритетом, что бы
нагрузка была более равномерна. Как только вылетает один из основных
серверов - нагрузка на бэкапные (само собой и на другие основные) на
долю должна увеличиться.
Victor Lavrenko schrieb:
>> -----Original Message-----
>> From: owner-nginx-ru@sysoev.ru [mailto:owner-nginx-ru@sysoev.ru] On
>> Behalf Of Михаил Монашёв
>> Здравствуйте, Виктор.
>>
>> VL> upstream backend {
>> VL> server frodo:80 max_fails=1 fail_timeout=10s;
>> VL> server sam:80 max_fails=1 fail_timeout=10s;
>>
>> VL> server merry:80 backup max_fails=1 fail_timeout=10s;
>> VL> server pippin:80 backup max_fails=1 fail_timeout=10s;
>> VL> }
>>
>> max_fails=1 на большой нагрузке - не есть хорошо, ибо с большой
>> вероятностью в приведённом конфиге frodo и sam работать будут сильно
>> реже, чем могли бы. Должно быть много fails, чтобы признать сервер
>> нерабочим на 10 секунд.
>>
>
> В том-то и дело, что нагрузка на самом деле небольшая -- например, по 55% от
> мощности frodo и sam'а, и если они оба нормально работают, то отвечают на
> запросы пользователей они просто на ура.
>
> Я имею ввиду ситуацию, когда сервер не просто нагрузку не тянет (за этим
> просто админы следят), а когда сервер физически сломался. Хочется мгновенно
> подключить к кластеру merry и pippin, т.к. без frodo сервер sam не потянет
> нагрузку (нагрузка будет 110% от его мощности).
>
> Понятно, что физически сервера ломаются очень редко, поэтому-то и хочется
> иметь примерно десяток кластеров, работающих каждый над своей задачей, и 1-2
> бэкапных сервера, на которые установлен весь какой только можно софт, и
> которые начинают работать только тогда, когда сломался один из основных
> серваков, причем бэкапные сервера еще и могут какую-то другую работу делать.
> Именно поэтому они должны именно как бэкапные работать -- если их в каждый
> из кластеров подключить, они просто не справятся. А если им маленькие веса
> дать, то даже в случае поломки они мало помогут, если в основном кластере
> больше одного сервера.
>
> Я правильно понимаю, что то, что я хочу сделать, делается через уменьшение
> tries с peers->number до 1 (а для бэкапных серверов оставляем
> peers->number). Так?
>
> --- nginx-0.7.62/src/http/ngx_http_upstream_round_robin.c 2008-12-23
> 22:35:12.000000000 +0300
> +++ nginx-0.7.62-lavrenko/src/http/ngx_http_upstream_round_robin.c
> 2009-10-09 17:17:34.000000000 +0400
> @@ -235,7 +235,7 @@
>
> r->upstream->peer.get = ngx_http_upstream_get_round_robin_peer;
> r->upstream->peer.free = ngx_http_upstream_free_round_robin_peer;
> - r->upstream->peer.tries = rrp->peers->number;
> + r->upstream->peer.tries = 1;
> #if (NGX_HTTP_SSL)
> r->upstream->peer.set_session =
>
> ngx_http_upstream_set_round_robin_peer_session;
> @@ -341,7 +341,7 @@
>
> r->upstream->peer.get = ngx_http_upstream_get_round_robin_peer;
> r->upstream->peer.free = ngx_http_upstream_free_round_robin_peer;
> - r->upstream->peer.tries = rrp->peers->number;
> + r->upstream->peer.tries = 1;
> #if (NGX_HTTP_SSL)
> r->upstream->peer.set_session =
>
> ngx_http_upstream_set_round_robin_peer_session;
>
> Тогда ведь если сломался хотя бы один сервер из основных, будут работать
> *все* бэкапные, так, причем они будут все тянуть нагрузку, эквивалентную
> нагрузке одного сервера (т.е. если их два, они будут тянуть половинную
> нагрузку)?
>
> Кстати, может какую-нть директиву сделать, чтобы указывать количество tries
> перед тем, как перейти к бэкапным серверам или такая фича кроме меня никому
> не нужна?
>
> С уважением,
> Виктор Лавренко
> Nigma.ru
>