Configuration tuning for best performance with upstream nodes down
Maxim Dounin
mdounin at mdounin.ru
Wed Apr 9 17:30:59 MSD 2008
Hello!
On Wed, Apr 09, 2008 at 09:58:06AM +0200, denis wrote:
>Hi,
>
>I've had some experience with Nginx working as a reverse proxy
>loadbalancer only for multiple apache backends. For most of the time
>performance was excellent.
>
>However during a few situations where backends would go down and stay
>down for a longer period of time it would seem Nginx was not behaving
>ideally. It would give lots of error messages about upstream timeouts
>(expected), but it would take a little long time before switching to the
>next upstream (imho anything that is noticeable by the user is a bit too
>long?).
>
>http://wiki.codemongers.com/NginxHttpUpstreamModule#server
>Is a bit confusing to me; fail_timeout and max_fails seem to be the
>numbers to work with, but as it appears, tuning fail_timeout down would
>also mean that downed backends would be tried again faster?!
Yes. And to make things even more clear: fail_timeout has nothing
to do with upstream response time, it's just a time frame for
nginx to remember fails.
It looks like you really want to tune how fails are detected.
Take a look at ngx_http_proxy_module configuration, notably
proxy_connect_timeout and proxy_read_timeout.
http://wiki.codemongers.com/NginxHttpProxyModule#proxy_connect_timeout
Note: proxy_connect_timeout defaults to 60s - its way too high for
backends under you control. I recommend tuning this to something
like 2s.
Note: proxy_read_timeout defaults to 60s too, and depending on you
task this may be either too high or too small.
There is also proxy_send_timeout, but normally it doesn't
matter since most requests are small and will fit into socket
buffers (so nginx can't distingush between send and read problems).
Maxim Dounin
>Let us say the scenario has backends that normally respond very quickly
>(<2secs), how would one best tune the appropriate parameters?
>
>
>An alternate way of doing this which I actually considered at one point,
>would be to automate checks (better checks than pure network connections
>in this case) and then removing the nodes from the pools in config, and
>forcing an nginx config refresh..
>
>Hope someone can give examples of config that minimizes worsening the
>user experience in fail situations, or otherwise enlighten me ;)
>
>Regards
>--
>Denis
>
>
>
More information about the nginx
mailing list