在循环Web服务器进程重新启动时避免502错误的网关

我有一个负载均衡器/反向代理(无论是nginx或切诺基,无所谓)是否在我的服务器上部署,它指向多个后台networking服务器进程(无论是gunicorn或cherrypy,无所谓哪个)在循环设置。

为了尽量减less停机时间,我有一个networking服务器重新启动脚本,杀死一个特定的networking服务器进程(说8个进程),然后再次启动它; 然后进入下一个networking服务器进程(杀死它,然后再次启动),所以在任何时候,我的反向代理将始终至less有7个进程可用。

这很棒; 但有没有办法“完善”这个过程,使得我根本不会得到502坏门户? 502网关发生在用户碰巧在网站上并使用暂时被杀死和复活的networking服务器进程时。

显然,我需要重新启动脚本的原因是在我的python应用程序(运行在gunicorn或cherrypy)上部署新的python代码。

nginx应该开箱即用。 如果所选的初始服务器不可达, proxy_next_upstream的默认error timeout设置将传递请求到上游块的下一个成员。

你为什么杀死gunicorn? 只要发送一个SIGHUP就像任何其他行为良好的Unix进程,它会愉快地重新加载而不会丢失任何连接。

如果您使用haproxy并为每个Web服务器进程configuration一个后端,并在这些后端上使用运行状况检查,则会检测到某个服务器已closures,并将其标记为脱机,从而将请求平衡到健康状态。
连接到重新启动的Web服务器的用户在刷新页面或启动另一个请求后,应重新平衡到工作的用户。

改为使用Apache httpd

它具有超级可configuration的反向代理负载均衡器 ,支持成员漏极和加权偏好,更不用说通过平衡器pipe理器界面进行在线重新configuration