【发布时间】:2016-11-03 16:15:44
【问题描述】:
这个(相当老的)article 似乎表明两个独角兽主进程 可以绑定到同一个 Unix 套接字路径:
当旧的 master 收到 QUIT 时,它开始优雅地关闭它的 worker。一次 所有的工人都完成了服务请求,它死了。我们现在有一个新版本的 应用程序,完全加载并准备好接收请求,没有任何停机时间:新旧工人 都共享 Unix 域套接字,因此 nginx 甚至不必关心转换。
四处阅读,我不明白这怎么可能。据我了解,真正做到零
停机时间你必须使用SO_REUSEPORT让新旧服务器临时绑定到
同一个插座。但是SO_REUSEPORT 是not supported on Unix sockets。
(我通过绑定到已被另一台服务器使用的 Unix 套接字路径对此进行了测试,我得到了
一个EADDRINUSE。)
那么如何实现文章中描述的配置呢?
- Nginx 将 HTTP 请求转发到 Unix 套接字。
- 通常单个 Unicorn 服务器接受此套接字上的请求并处理它们(很公平)。
- 在重新部署期间,新的 Unicorn 服务器开始接受此套接字上的请求并处理它们,而旧服务器仍在运行(如何?)
【问题讨论】: