php-fpm upstream pool

igor.goncharenko nginx-forum на nginx.us
Пт Ноя 25 13:06:37 UTC 2011


Hi!

Тестирую php-fpm пул и nginx балансером к
нему. Требования - если один или
несколько из серверов пула начинают
отвечать дольше чем 30 сек - запрос
отправлять на другой сервер пула:

nginx.conf:

http {

{skip}

  fastcgi_connect_timeout 3;
  fastcgi_next_upstream error timeout invalid_header;
  fastcgi_read_timeout 30;
  fastcgi_send_timeout 3;

{skip}

vhost.conf:

{skip}

upstream  fcgi_proxy {
  server   10.0.0.10:9000 max_fails=1 fail_timeout=240s; # answer more
than 60 sec
  server   10.0.0.11:9000 max_fails=1 fail_timeout=240s; # answer more
than 60 sec
  server   10.0.0.12:9000 max_fails=1 fail_timeout=240s; # ok
  }


location ~ ^/fcgi_proxy/$ {

            include /usr/local/etc/nginx/fastcgi_params;

            fastcgi_param SCRIPT_FILENAME /home/fcgi_proxy/index.php;
            fastcgi_param HOST            $host;
            fastcgi_pass fcgi_proxy;

           allow all;
      }

{skip}

Пул работает отлично пока два сервера
их трех начинают отвечать долго (см
коментарий в upstream, эмулируем timeout
больше 30 сек). В этом случае
проскакивают такие ошибки:

10.0.0.1 - - [25/Nov/2011:12:38:26 +0000] "GET /fcgi-proxy/ HTTP/1.1"
504  1205 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.70)" "-"
"10.0.0.10:9000, 10.0.0.11:9000 : 10.0.0.12:80 504, 504 : 404 - 30.008,
30.007 : 0.002" 60.017 SSL:-/- "gzip:-"

То-есть 2 первых сервера их пула
"ответили" 504 (не отработали по
таймауту), третий отработал правильно и
вызад 404 (в данном случае это корректный
ответ), но клиент все равно получил 504
ответ, хотя как я понимаю, должен был
получить 404.

и вот это еще странно 10.0.0.12:80 - откуда
берется 80 порт?


Таких ошибок всего 5 из 5000 (1000 concurrent = 5):
$siege fcgi-proxy-test.com/fcgi-proxy/ -d1 -r1000

Transactions:                   4995 hits
Availability:                  99.90 %
{skip}
Failed transactions:               5


лог siege:
HTTP/1.1 404   0.01 secs:      41 bytes ==> /fcgi-proxy/
{skip}
HTTP/1.1 504  60.02 secs:    1205 bytes ==> /fcgi-proxy/
HTTP/1.1 504  60.04 secs:    1205 bytes ==> /fcgi-proxy/
HTTP/1.1 504  60.02 secs:    1205 bytes ==> /fcgi-proxy/
HTTP/1.1 504  60.03 secs:    1205 bytes ==> /fcgi-proxy/
HTTP/1.1 504  60.02 secs:    1205 bytes ==> /fcgi-proxy/
{skip}
HTTP/1.1 404   0.00 secs:      41 bytes ==> /fcgi-proxy/

Siege сам не рвет сессии (у него стоит timeout
= 600 и тогда я бы видел в логе 499 ошибку).
Подскажите, что не так в этой
конфигурации пула? 

freebsd 8.2 i386/nginx-1.0.10_1,1


---
Igor

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,219032,219032#msg-219032



Подробная информация о списке рассылки nginx-ru