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