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?