> So, there must be a misconception on my, because to me, just refusing new connections isn't graceful. If the LB is sending you new connections, you should honor them.
You are right. I took some shortcuts in my explanation. > So, from what I get, k8s stops sending new connections to Varnish, and what you want is is for Varnish to shutdown once there's no more active connections. That is exactly what happens, indeed. How it happens is irrelevant to our conversation, but, for the sake of being on the same page it's important to assume: k8s stopped sending new connections to the old instance and started sending them to the new instance, and I want old varnish to shutdown once there's no more active connections. > But, let's stop being a pompous jerk obsessed with semantics and let's try to work on a solution. All good, it's actually important ;) I will try your solution right away and let you know, in theory it seems like it should work. Thanks for trying to find a solution! -Hugues On Wed, Oct 18, 2017 at 12:01 PM, Guillaume Quintard < [email protected]> wrote: > Hello, > > So, there must be a misconception on my, because to me, just refusing new > connections isn't graceful. If the LB is sending you new connections, you > should honor them. > > So, from what I get, k8s stops sending new connections to Varnish, and > what you want is is for Varnish to shutdown once there's no more active > connections, which is, I would argue, kinda different from refusing new > connections. But, let's stop being a pompous jerk obsessed with semantics > and let's try to work on a solution. > > From what I get, we can kill varnish as soon as the number of active > connections drops to 0, so your apachectl command would be equal to this in > Varnish language: > > if [ `varnishstat -1 | awk '/MEMPOOL.sess[0-9]+.live/ {a+=$2} END {print > a}'` != 0 ]; then > sleep 1 > fi > killall varnishd > > > There's probably a shorter version ,but that's the gist of it. > > Would that do? > > -- > Guillaume Quintard > > On Wed, Oct 18, 2017 at 8:22 PM, Hugues Alary <[email protected]> > wrote: > >> Hi, >> >> That is indeed what I want to do. Draining connections at the LB level >> just involves more work ;). >> >> For context: my entire stack runs on a kubernetes cluster. >> >> I sometime need to replace a running instance of a server process [be it >> nginx apache php-fpm varnish whatever] with a new instance. >> >> Taking Apache as an example, I simply create the new apache instance (a >> new pod in kubernetes speak), which immediately starts getting some traffic >> (without changing the load balancer configuration at all, a kubernetes >> "service" automatically detects new pods), then I gracefully shutdown the >> old instance (kubernetes actually automatically tells the pod to shutdown), >> by issuing a "apachectl -k graceful-stop" (kubernetes is configured to >> issue this command for me), which instructs apache to stop accepting >> connections, finish, then shutdown. >> >> It's really great because instead of having to push a new config refusing >> probes and reload it, I (/kubernetes) simply gracefully stops apache and >> the traffic flows to the new instance. nginx and php-fpm also handle things >> this way. >> >> At any rate, thanks for the advice, I will start using probes! >> >> Cheers, >> -Hugues >> >> >> >> On Tue, Oct 17, 2017 at 11:51 PM, Guillaume Quintard < >> [email protected]> wrote: >> >>> Hi, >>> >>> That's not possible. However, what you really want, I think, is not >>> sending new requests to Varnish. That's usually done at the loa-bbalancing >>> level. If your LB use probes, you can tell Varnish to stop honoring them, >>> drain the connections, then kill it. >>> >>> -- >>> Guillaume Quintard >>> >>> On Oct 18, 2017 02:28, "Hugues Alary" <[email protected]> wrote: >>> >>>> Hi there, >>>> >>>> I've been looking around and I can't find a documented way of >>>> gracefully shutting down varnishd, and by gracefully I mean tell varnish >>>> "stop accepting connections, but finish what you were doing, then >>>> shutdown". >>>> >>>> I did find something in the "first varnish design notes" ( >>>> https://varnish-cache.org/docs/5.1/phk/firstdesign.html) which seemed >>>> to indicate that sending SIGKILL/SIGTERM would mean "suspend/stop" but KILL >>>> doesn't seem to work, and TERM, well... terminates but not gracefully. >>>> >>>> I also tried using "varnishadm stop", which also doesn't gracefully >>>> stops connection. >>>> >>>> Is there anyway to achieve this? >>>> >>>> Thanks! >>>> -Hugues >>>> >>>> _______________________________________________ >>>> varnish-misc mailing list >>>> [email protected] >>>> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc >>>> >>> >> >
_______________________________________________ varnish-misc mailing list [email protected] https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
