这个(相当古老的)article似乎暗示了两个Unicorn主进程 可以绑定到相同的Unix套接字路径:
当旧主人收到QUIT时,它会正常开始关闭其工作人员。一旦 所有工人都完成了服务请求,它就死了。我们现在有一个新版本的 应用程序,满载并准备接收请求,没有任何停机时间:新老员工 所有人都共享Unix Domain Socket,因此nginx甚至不必关心过渡。
阅读,我不明白这是怎么可能的。从我的理解,到真正的零
停机时你必须使用SO_REUSEPORT
暂时将旧服务器和新服务器绑定到
相同的插座。但SO_REUSEPORT
是not supported on Unix sockets。
(我通过绑定到另一台服务器已经在使用的Unix套接字路径来测试它,我得到了
一个EADDRINUSE
。)
那么如何实现文章所描述的配置呢?
答案 0 :(得分:1)
我最好的猜测是第二台服务器在使用相同的套接字文件调用https://jenkins_url/api/xml?tree=jobs[name,jobs[name,jobs[name,jobs[name,jobs[name,jobs[name]]]]]]
之前立即调用套接字文件上的unlink
,所以实际上有一个小窗口没有进程被绑定到套接字和连接将被拒绝。
有趣的是,如果我绑定到套接字文件然后立即删除该文件,则实际接受与套接字的下一个连接。第二个及后续连接将按预期bind
拒绝。因此,当一个进程控制另一个进程绑定的套接字时,内核可能会为您提供一些帮助。 (这是在Linux BTW上。)