ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Связка nginx-memcached и упавший узел с memcached ...


  • To: nginx-ru@xxxxxxxxx
  • Subject: Связка nginx-memcached и упавший узел с memcached ...
  • From: Eugene Batogov <johnbat26@xxxxxxxxx>
  • Date: Tue, 7 Jun 2011 11:41:01 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:to:subject:date:user-agent:x-kmail-markup :mime-version:content-type:content-transfer-encoding:message-id; bh=Oo/jb8ATiRouVmysHH/NJJwRDVyzI9dQdHyyO+l1jl4=; b=A0GjnpGs0aOB3RNAtgjEf3chfP74C/w11EDcW87L2kP2f40MCS9Kx+jwzj1vbxrvYp 3sdBlLHYUavK401mtvoNMO27K+fbXzwB3/I07vyiPUZ0LzyyqmU54IYb1tZfM/DyTCDd RujRoy3/bbLSfBHUxSqw4j4GDvYmGfXLgCchg=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:x-kmail-markup:mime-version :content-type:content-transfer-encoding:message-id; b=A7abMscdyOPEY4UhEjHoameSQdjrOsv79UbdJVeS2bGtYVW9pF4oKfGv5CGOBjLzN+ 55g2foK0fPwUOPfm2Wwtfh0yGqBE4O+zTbU/OlSvDF+TqU/AOHpSlCfH8Pzo8sILPsiI D001ioSG7FN93GXhc8k9woGknr+lT2E0JIgVw=

Привет всем.

В продолжение моего предыдущего поста. (http://forum.nginx.org/read.php?21,204258)

--------------

Окружение :

OS: CentOs 5.5 x86-64

Hardware: IBM System x3650

nginx -V:

nginx -V

nginx: nginx version: nginx/1.0.4

nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-50)

nginx: TLS SNI support disabled

nginx: configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-debug --with-mail --with-mail_ssl_module --with-cc-opt='-O2 -g -m64 -mtune=generic' --with-ipv6 --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx-upstream-fair --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx-upload-progress-module --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/mod_zip-1.1.6 --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx_upload_module-2.2.0 --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx_mod_h264_streaming-2.2.7 --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx-push-stream-module --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx_upstream_hash-0.3.1 --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/ngx_http_consistent_hash --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/nginx-memcached-hash-pass --add-module=/usr/src/redhat/BUILD/nginx-1.0.4/ngx_http_upstream_keepalive-2ee28064a04a

.....

-----------


У меня есть два узла с memcached, заключенные в upstream:

...

upstream memcached_cluster {

server 192.168.1.1:11211;

server 192.168.1.2:11211;

hash $uri;

hash_again 1000; # default 0

}

...


В секции http{...} я задаю следующие connection timeouts:

...

#timeouts

keepalive_timeout 45 45;

client_header_timeout 45;

client_body_timeout 45;

send_timeout 45;

reset_timedout_connection on;

memcached_connect_timeout 3;

memcached_read_timeout 20;

memcached_send_timeout 20;

#timeouts end

...


Далее запускаю нагрузочный тест, который создает нагрузку ~ 1000 запросов в секунду.

Как видно из параметров:

hash $uri;

hash_again 1000; # default 0


я использую ngx_http_upstream_hash_module

для правильного выбора узла с кэшем.

Этот модуль использует алгоритм CRC32.


Далее, после выхода системы в рабочий режим под нагрузкой, я эмулирую падение одного (192.168.1.2) узла с memcached, выполняя на нем команду: shutdown.

В результате nginx продолжает его считать рабочим, и все запросы, которые раньше шли на 192.168.1.2 так и пытаются туда идти,

только теперь они ждут таймаут memcached_connect_timeout и потом проваливаются на backend.

Почему nginx в случае таймаута не может при каком-либо условии (например узла физически нет минуту ) просто выключать его из списка и

производить rehash?

А по прошествии, например часа, снова пробовать подсоединиться к узлу?

То есть, другими словами, очень необходима функциональность по динамическому распознаванию упавшего узла, и выключению его из списка кэш-серверов.

--

Далее попробовал модуль М.Дунина: ngx_http_upstream_keepalive и перенастроил upstream следующим образом:

...

upstream memcached_cluster {

server 192.168.1.1:11211;

server 192.168.1.2:11211;

hash $uri;

hash_again 1000; # default 0

keepalive 1024;

}

...

Все работает отлично, если все ноды с кэшем исправны. Но в случае падения одного из них, ситуация аналогична описанной выше :(.







--

Best Regards, Eugene Batogov


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.