1.4.4 平滑升级

当需要将正在运行中的Nginx升级、添加/删除服务器模块时,如果我们先停掉服务做相应修改后再启动服务,服务器就要在一段时间内不能被访问。Nginx有一大优势就是可以在不中断服务的情况下,使用新版本、重编译的Nginx可执行程序替换旧版本的可执行程序,这样就不会影响对服务器的访问。
我们来介绍一下具体的升级步骤。

1.编译安装新的可执行程序

对于编译源码安装的Nginx,可以将新版本编译安装到旧版本的安装路径中,从而用新的可执行程序替换旧的可执行程序。替换之前,最好备份一下旧的可执行文件。

2.执行指令:kill -USR2 旧版本Nginx主进程号

执行该指令后,旧版本Nginx的主进程将重命名它的pid文件为.oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。
此时,所有工作进程(旧的和新的)会同时运行,共同处理输入的请求。

3.执行指令:kill -WINCH 旧版本Nginx主进程号

如果要逐步停止旧版本的Nginx实例,我们要发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭。
一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。

4.恢复旧版本/使用新版本

这个时候,旧的主进程不会关闭其listen sockets,并且可以管理它,以便在需要的时候重新启动它的工作进程。
如果新的可执行文件有问题,我们可以恢复到旧版本,具体操作如下:
kill -HUP 旧版主进程号:Nginx将在不重载配置文件的情况下启动旧版本的工作进程。
kill -QUIT 新版主进程号:从容关闭新版本的工作进程(worker process) 。
kill -TERM 新版主进程号:强制退出新版本工作进程。
kill 新版主进程号:如果因为某些原因新的工作进程不能退出,则向其发送kill信号。
如果新的主进程退出,旧的主进程会移除.oldbin后缀,恢复为它的.pid文件,这样一切就恢复到升级之前了。
如果尝试升级成功,而你也希望保留新的服务器时,可发送QUIT信号给旧的主进程,使其退出而只留下新的服务器运行。

results matching ""

    No results matching ""