On Mon, May 16, 2016 at 12:57 PM, Remko Tronçon <[email protected]> wrote: > Hi, > > This question has probably been asked before, but I couldn't find anything. > > I want to run HAProxy under a system using s6. I want to make HAProxy hot > reload its configuration to have minimal downtime on configuration updates. > The way this is done in HAProxy is by starting a second instance, which > takes over the port and asks the first instance to exit. However, if > haproxy runs under s6, when the first haproxy process goes away, s6 will > automatically restart it I assume? Is there a way around this? How is > HAproxy generally used with s6?
I've been thinking about this same issue with HAProxy and runit for work. The least worst solution that I've come up with so far has been to have the reload script launch an unsupervised and daemonized copy of HAProxy against the new config, digging out the process id via sv status. Once the handoff happens, the script tosses the pid of the interstitial copy into a well-known location that will get picked up when runsv recycles the longrun version. As Laurent said, there's some special casing that needs to be done depending on the context that the service is being brought up. This solution is pretty grotty and I'm not super happy about it, but it's the least over-engineered version that I've come up with thus far. I don't have any proof-of-concept code or anything going right now but it shouldn't take too much work to implement. Keep in mind that this is the runit version, an s6 implementation would be similar though you can use other tools in the s6 suite to minimize or eliminate any race conditions around the process handoff. Cheers! -- "If the doors of perception were cleansed every thing would appear to man as it is, infinite. For man has closed himself up, till he sees all things thru' narrow chinks of his cavern." -- William Blake
