Welcome! Log In Create A New Profile

Advanced

Re: Graceful backend shutdown

Maxim Dounin
October 08, 2013 08:40AM
Hello!

On Tue, Oct 08, 2013 at 10:33:38AM +0200, Aivaras La wrote:

> Maxim Dounin wrote in post #1123727:
> > Hello!
> >
> > On Mon, Oct 07, 2013 at 10:08:48AM +0200, Aivaras La wrote:
> >
> >> Hi all!
> >>
> >> I'm using Nginx as a reverse proxy and loadbalancer with 2 backends.
> >> Sometimes I need to turn off one of the apps server. And I need to do it
> >> gracefully, that when I comment one server in Nginx config, Nginx master
> >> process starts to send new requests to new server, but old requests and
> >> sessions stay in old server. I tried to use down, but it loses sessions.
> >> Then tried use kill -HUP, but Nginx immediately loads new config and
> >> closes old sessions and redirects them to new server. Thanks for help.
> >
> > On kill -HUP nginx does a gracefull shutdown of old worker
> > processes. That is, all requests being handled by old worker
> > processes are continue to work till they are complete. No
> > requests are lost and/or unexpectedly terminated. Details on
> > reconfiguration process can be found here:
> >
> > http://nginx.org/en/docs/control.html#reconfiguration
>
> I'll try to explain my example:
> In my config I have upstream with 1 backend, then I change that 1
> backend server IP address ( I put something I don't need (just for
> example) like local news page). Then I try to access Nginx (with old
> config) which starts to load my big page. When page is loading I did HUP
> signal and then my page wasn't completed. New workers spawned and old
> workers quitted at the same second. Nobody was waiting. Is there a
> possibility that old workers wait much longer? Or somehow to change
> backend servers with serving old sessions? Thanks for help!

From your description of the problem I tend to think that by
"loading a big page" you mean a page with many external resources
(like images, etc.), and your new nginx configuration isn't able
to handle requests to these resources.

This is not going to work. As you probably heard before, HTTP is
a stateless protocol. This means that in terms of HTTP there is
no such a thing as a "session", or "page loading". The only thing
HTTP knows about is a _request_. That is, nginx guarantees that
_requests_ are handled correctly according to a configuration it
has. But nginx doesn't know that your browser didn't loaded some
of the external resources it needs yet, and your new configuration
can't handle requests to these resources.

Correct approach to your problem is to use a configuration that
can handle requests all the time, instead of breaking it at some
point.

--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Graceful backend shutdown

Aivaras La October 07, 2013 04:10AM

Re: Graceful backend shutdown

Maxim Dounin October 07, 2013 07:14AM

Re: Graceful backend shutdown

Aivaras La October 08, 2013 04:34AM

Re: Graceful backend shutdown

Maxim Dounin October 08, 2013 08:40AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 201
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready