-----Original Message-----
From: owner-nginx-ru@xxxxxxxxx [mailto:owner-nginx-ru@xxxxxxxxx] 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