我在我的服务器上部署了一个负载平衡器/反向代理(nginx 或 cherokee,无关紧要),它指向循环设置中的多个后台 Web 服务器进程(gunicorn 或 cherrypy,无关紧要) .
为了尽量减少停机时间,我有一个网络服务器重启脚本,它会杀死一个特定的网络服务器进程(比如 8 个进程),然后立即再次启动它;然后继续下一个网络服务器进程(杀死它,然后再次启动它)所以在任何时候,我的反向代理总是至少有 7 个进程可以指向。
这很棒; 但是有没有办法“完善”这个过程,这样我就根本不会得到 502 Bad gateway? 502 网关发生在用户恰好在网站上并使用暂时被杀死和复活的网络服务器进程时。
显然,我需要重启脚本的原因是为了在我的 python 应用程序(在 gunicorn 或 cherrypy 上运行)中部署新的 python 代码。
nginx 应该开箱即用。 如果选择的初始服务器无法访问, proxy_next_upstream的默认
error timeout
设置会将请求传递给上游块的下一个成员。你为什么要杀gunicorn?只需像任何其他行为良好的 Unix 进程一样向它发送 SIGHUP,它就会愉快地重新加载而不会丢失任何连接。
如果您使用 haproxy 并为每个 Web 服务器进程配置一个后端,并且还在这些后端上使用健康检查,它会检测一个何时关闭并将其标记为离线,从而平衡对健康进程的请求。
连接到重新启动的网络服务器的用户在刷新页面或发起另一个请求后应该重新平衡到工作的服务器。
请改用apache httpd。
它有一个超级可配置的反向代理负载均衡器,支持成员流失和加权偏好,更不用说通过平衡器管理器界面进行在线重新配置了。