Назад | Перейти на главную страницу

Истекло время ожидания восходящего потока nginx. Несколько серверов одновременно

У меня несколько серверов, обслуживающих один сайт.

На основном сервере работают nginx и php-fpm. А на всех остальных серверах работает php-fpm. Сервер, на котором работают как nginx, так и php-fpm, подключается через сокет unix, а остальные - через tcp.

Примерно раз в час (не совсем, иногда чаще) наблюдается странное поведение. Таймаут всех подключений nginx к серверам php-fpm. Не удается установить соединение.

2014/03/24 04:59:09 [error] 2123#0: *925153 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.5:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2124#0: *926742 connect() to unix:/tmp/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fpm.sock:", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2123#0: *925159 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.2:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2123#0: *923874 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.3:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2123#0: *925164 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.4:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2124#0: *909392 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.3:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2124#0: *923098 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.5:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"
2014/03/24 04:59:09 [error] 2125#0: *923309 upstream timed out (110: Connection timed out) while connecting to upstream, client: <<client ip removed>>, server: www.example.com, request: "GET /some/address/here HTTP/1.1", upstream: "fastcgi://192.168.1.4:9000", host: "www.example.com", referrer: "http://www.example.com/some/address/here"

Поскольку это довольно загруженный сайт, журнал, как указано выше, заполняется довольно быстро.

Это длится примерно 10-15 секунд, и все возвращается в норму. Помимо сообщений об ошибках, связанных с превышением времени ожидания подключения, других ошибок, похоже, нет.

Я подозреваю, что проблема связана с nginx, поскольку это происходит одновременно на всех серверах php-fpm.

Что могло вызвать это? И как это можно было решить?

Моя конфигурация nginx ...

user  nginx;
worker_processes  4;
worker_rlimit_nofile 30000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  5;
    fastcgi_buffers 256 4k;
    gzip on;
    gzip_disable     "msie6";

    fastcgi_cache_path /dev/shm/caches/  levels=1:2 keys_zone=zoneone:4000m max_size=4000m inactive=30m;

    fastcgi_temp_path /var/www/tmp 1 2;
    fastcgi_cache_key "$scheme$proxy_host$request_uri";

    fastcgi_connect_timeout 3s;
    limit_req_zone  $binary_remote_addr  zone=limitone:200m   rate=1r/s;
    limit_req_zone  $binary_remote_addr  zone=limitcomic:500m   rate=40r/m;

    upstream partone {
        server unix:/tmp/php-fpm.sock;
    }

    upstream parttwo {
        server 192.168.1.3:9000 weight=10 max_fails=0 fail_timeout=2s;
        server 192.168.1.4:9000 weight=10 max_fails=0 fail_timeout=2s;
        server 192.168.1.5:9000 weight=10 max_fails=0 fail_timeout=2s;
    }

    upstream parttre {
        server 192.168.1.2:9000 weight=8 max_fails=0 fail_timeout=2s;
        server 192.168.1.3:9000 weight=10 max_fails=0 fail_timeout=2s;
        server 192.168.1.4:9000 weight=10 max_fails=0 fail_timeout=2s;
        server 192.168.1.5:9000 weight=10 max_fails=0 fail_timeout=2s;
    }
... stuff with server, locations and such...
}

Как видите, я даже не использую все 5 серверов в одном контексте.

версия nginx: nginx / 1.4.5

Это обоснованное предположение. Проблема могла быть вызвана исчерпанием локальных портов TCP для подключений к вышестоящим серверам.

Вы можете проверить диапазон разрешенных портов с помощью:

sysctl net.ipv4.ip_local_port_range

По умолчанию в моей установке Debian установлено 32768 - 61000.

Вы можете расширить диапазон, введя следующую команду от имени пользователя root:

echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range

Если вы используете Debian или производный дистрибутив, вы можете сохранить этот параметр при перезагрузке, отредактировав /etc/sysctl.d/99-local.conf и введите это в файл:

net.ipv4.ip_local_port_range = 1024 65535