标签:
Nginx的平滑升级
当需要将正在运行中的NginX升级、添加/删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的Nginx可执行程序替换旧版本的可执行程序。步骤如下:
(1)使用新的可执行程序替换旧的可执行程序,对于编译安装的NginX,可以将新版本编译安装到旧版本的NginX安装路径中。替换之前,您最好备份一下旧的可执行文件^
(3)旧版本Nginx的主进程将重命名它的扣」文件为.01北丨11 (例如:/usrAocaywebserver/nginx^ogs/nginx.pid.oldbin),然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。
PK)PPEDUSER%CPUVSZWCHANCOMMAND
33126lroot0.01164pausenginx:masterprocess/usr^ocaynginx/sbin/nginx3313533126nobody0.01380kqreadnginx:workerprocessisshuttingdown(nginx)
3626433126root0.01148pausenginx:masterprocess/usr^ocaynginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
(4)此时,新、旧版本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止旧版本的NginX实例,你必须发送WmCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
kiil-WINCH旧版本的讨口土狀主进程号
(5)一段时间后,旧的工作进程(workerprocess)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了:
PIDPPIDUSER |
%CPUVSZWCHANCOMMAND |
|
331261root |
0.0 |
1164pausenginx:masterprocess/usr/loca^nginx/sbin/nginx |
|
3626433126root |
0.0 |
1148pausenginx:masterprocess/usr^ocaUnginx/sbin/nginx |
|
3626536264nobody |
0.0 |
1364kqreadnginx:workerprocess(nginx) |
|
3626636264nobody |
0.0 |
1364kqreadnginx:workerprocess(nginx) |
|
3626736264nobody |
0.0 |
1364kqreadnginx:workerprocess(nginx) |
|
(6)这时候,我们可以决定是使用新版本,还是恢复到旧版本:kill-HUP旧的主进程号:Nginx将在不重载配置文件的情况下启动它的工作进程;kill-QUIT新的主进程号:从容关闭其工作进程(workerprocess);kill-TERM新的主进程号:强制退出;
kill新的主进程号或旧的主进程号:如果因为某些原因新的工作进程不能退出,则向其发送让出信号。
新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为它的.pid文件,这样,一切就都恢复到升级之前了。如果尝试升级成功,而你也希望保留新的服务器时,可发送Qurr信号给旧的主进程,使其退出而只留下新的服务器运行:
|