nginx平滑升级

把服务器从低版本升级为高版本,强行停止服务器,会影响正在运行的进程。

平滑升级不会停掉正在进行中的进程,这些进程会继续处理请求。但不会再接受新请求,这些老的进程在处理完请求之后 会停止。此平滑升级过程中,新开的进程会被处理。

一)平滑升级

进入nginx可执行程序的目录

$ cd /usr/local/nginx/sbin/
$ ./nginx -V # 查看nginx版本

1)下载高版本nginx

$ wget http://nginx.org/download/nginx-1.1.14.2.tar.gz
$ ./configure
$ make    #不能执行 make install
$ cd objs #  此目录下 有高版本的nginx
$ cp nginx nginx.old
 # 备份低版本的nginx
$ cp -rfp objs/nginx /usr/local/nginx/sbin
 # 执行强制覆盖

测试一下新复制过来文件生效情况:

$ /usr/local/nginx/sbin/nginx -t
$ ps -ef | grep nginx

此时可以在nginx源目录当中执行以下命令平滑升级,不需要在看2)

给nginx发送USR2信号后,nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的nginx.pid保存新的主进程号

3)kill -WINCH 旧的主进程号

旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭。即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接。这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止。

意思是只是关闭 work工作进行,master主进程没关闭。

处理完后,工作进程会自动关闭

4)优雅的关闭旧的主进程

给旧的主进程发送QUIT信号后,旧的主进程退出,并移除logs/nginx.pid.oldbin文件,nginx的升级完成。

升级完成了,最后在看一下升级后的版本

查看

已经平滑升级成功

二)中途停止升级,回滚到旧的nginx

在步骤(3)时,如果想回到旧的nginx不再升级

(1)给旧的主进程号发送HUP命令

此时nginx不重新读取配置文件的情况下重新启动旧主进程的工作进程。

重启工作进程

或使用下面的命令

(2)优雅的关闭新的主进程

或使用下面的命令

Last updated

Was this helpful?