Re: don't retry a failed server
Alex Krohn <[email protected]> Fri, 14 May 2004 13:42:31 -0700
| Newsgroups | gmane.comp.apache.mod-backhand.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Theo, > >I'm forcing web2 to fail, by restarting the mod_perl server, and hitting > >the cluster while the mod_perl server is restarting. Due to the amount > >of code that is preloaded, and database connections setup, a mod_perl restart > >takes about 10 seconds. > > > >I'm trying to make it so that I can restart all the mod_perl servers in > >serial, without the user seeing anything (so if they happen to be sent > >to a server that just got restarted, they will get sent to a new one). > > > > > That is a valid problem. Ideally, there would be a maturity setting in > the front end servers -- telling it when they mature. Also a "failure" > setting, but that i a bit dangerous as overloaded servers can fail once > and succeed on an immediate reattempt. (which is why the code works as > it does)... > > Like any good system, there is a hack workaround. > > block mod_backhand's outbound UDP traffic from your box until mod_perl > starts up completely. > > Assuming you are running on FreeBSD and running MulticastStats as > 225.2.3.4:4445,1 > > ipfw add 00010 deny udp from any to any 4445 out > Wait 5 seconds (or whatever your byAge timeout is... > shutdown... > update code... > restart... > wait 'til restart is complete. > ipfw delete 00010 > > Something like this can be accomplished on Linux to with ipchains or > iptables. Thanks, works great! For anyone else, you can do this with iptables using: iptables -A OUTPUT -p udp --sport 4445 -j REJECT sleep 5 restart mod_perl iptables -D OUTPUT -p udp --sport 4445 -j REJECT Cheers, Alex -- Alex Krohn <[email protected]>