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