CNode

关于pm2平滑更新的问题

问答
GGitforxuyang发布于8 年前最后回复8 年前7 回复5028 浏览0 收藏

网上一直说reload是0秒平滑更新,但是我今天在试的时候发现。当reload创建完新的进程接收请求后就会关闭旧进程。此时,旧进程里正在连接的socket会被强制关闭(准确来说应该是进程整个被Kill了),而不是等待它完成再关闭。 然后gracefulReload我也试了,也差不多。并不会照顾到当前正在连接的socket。 所以想问一下,难道就没有一种办法,让pm2创建新进程接收新的请求,同时等待原进程的所有请求完成后再关闭旧进程。

查看回复

回复 (7)

D
dbit-xia#1·8 年前

用两个进程和两个端口来回切换, 然后用nginx做LB, 旧程序端口weight降级 估计可以

G
Gitforxuyang#2·8 年前
引用 dbit-xia用两个进程和两个端口来回切换, 然后用nginx做LB, 旧程序端口weight降级 估计可以

@dbit-xia 感谢你消灭0回复。 你说的方法可行。我们目前就是用负载均衡去切流量。 但是考虑到每次更新都得切来切去不方便,所以有了此问。 我已经测试确认,使用pm2的gracefulReload,然后自己实现接收sigint信号自行决定关闭时间。 基本可以实现平滑更新。

S
ssttm169#6·8 年前
G
Gitforxuyang#7·8 年前

@ssttm169 因为cnode论坛回复篇幅有限,所以我写在了自己的博客上。 这是初稿,有一些不严谨的地方我后期还有完善。但大致的实现逻辑没有问题。下面附上pm2平滑更新的链接: https://www.xuyang.site/template.html?topnav=%E6%80%9D%E7%BB%B4%E7%81%AB%E8%8A%B1&page=article&idx=27

参与回复
登录后即可参与回复。登录