nginx upstream expiré. Plusieurs servers en même time

J'ai plusieurs servers desservant un seul site.

Le server principal exécute nginx et php-fpm. Et tous les autres servers exécutent php-fpm. Le server qui exécute à la fois nginx et php-fpm se connecte via un socket Unix et les autres via tcp.

Environ une fois par heure (pas exactement, parfois plus fréquemment), il y a un comportement étrange. Toutes les connections du timeout d'attente des servers nginx à php-fpm. Il ne parvient pas à établir une connection.

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" 

Comme il s'agit d'un site assez occupé, le journal comme ci-dessus est peuplé assez vite.

Cela dure environ 10 à 15 secondes et tout revient à la normale. Outre les erreurs de temporisation de connection postées ici, il ne semble pas y avoir d'autres erreurs.

Je soupçonne que le problème réside dans nginx car il se produit simultanément sur tous les servers php-fpm.

Qu'est-ce qui causerait cela? Et comment cela pourrait-il être résolu?

Ma configuration nginx est …

 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... } 

Vous pouvez voir que je n'utilise même pas tous les 5 servers dans le même context.

version nginx: nginx / 1.4.5

One Solution collect form web for “nginx upstream expiré. Plusieurs servers en même time”

C'est une estimation éduquée. Le problème pourrait être causé par l'épuisement des ports TCP locaux pour les connections aux servers en amont.

Vous pouvez vérifier la scope des ports autorisés avec:

 sysctl net.ipv4.ip_local_port_range 

La configuration par défaut de mon Debian est 32768 – 61000.

Vous pouvez étendre la scope en entrant la command suivante en tant que root:

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

Si vous utilisez un Debian ou une dissortingbution dérivée, vous pouvez persévérer dans ce paramètre à travers les redémarrages en éditant /etc/sysctl.d/99-local.conf et en entrant dans le file:

 net.ipv4.ip_local_port_range = 1024 65535 
Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.