nginx平滑升级操作示例

发布时间:2020-07-02编辑:脚本学堂
分享下nginx平滑升级的方法,为在线服务的 nginx 升级或添加模块时,大多需要平滑升级,平时也要做到nginx的定期升级比较好。

nginx 的 kill 信号机制,关键信号:
 

USR2 平滑升级可执行程序。
WINCH 从容关闭工作进程
QUIT 从容关闭

1、先发送 USR2 信号,例如:
 

复制代码 代码示例:
kill -USR2 `cat logs/nginx.pid` 
kill -USR2 `cat logs/nginx.pid`
 

此时用 ps -ef | grep nginx 可以看到多了一倍的 nginx 的相关进程。同时 logs 目录下多了一个 nginx.pid.oldbin 文件,记录的是旧的 nginx 主进程的 pid。

2、用 WINCH 信号关闭旧的工作进程
 

复制代码 代码示例:
kill -WINCH `cat logs/nginx.pid.oldbin` 
kill -WINCH `cat logs/nginx.pid.oldbin`
 

此时,旧的 nginx 主进程还没关闭的,只是旧的 nginx 工作进程关了。

如果正常可以执行第3步。

3、用 QUIT 信号关闭旧的 nginx 主进程
 

复制代码 代码示例:
kill -QUIT `cat logs/nginx.pid.oldbin` 
kill -QUIT `cat logs/nginx.pid.oldbin`

这样算升级了,新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,可以恢复到升级前的状态。

当然在第2部时可能发现不对,可以补救,仍可以恢复旧的服务器
1,发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程。
2,发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程。
3,发送 TERM 信号给新的主进程,迫使其退出。
4,如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号。