RE: backup на нагруженной системе

Victor Lavrenko lavrenko at nigma.ru
Fri Oct 9 17:24:53 MSD 2009


> -----Original Message-----
> From: owner-nginx-ru at sysoev.ru [mailto:owner-nginx-ru at 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


More information about the nginx-ru mailing list