6、openresty:nginx平滑升级

一笑奈何 提交于 2019-12-27 00:38:24

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

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

一、平滑升级

进入nginx可执行程序的目录

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

1、下载高版本nginx http://nginx.org/download/nginx-1.13.1.tar.gz

执行指令

#  ./configure
# make    #不能执行 make install
# cd objs

此目录下 有高版本的nginx
备份低版本的nginx

cp nginx nginx.old

执行强制覆盖

cp -rfp objs/nginx /usr/local/nginx/sbin

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

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

2、执行信号平滑升级

# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`  更新配置文件

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

# ps -ef | grep nginx
# ll logs/

3、kill -WINCH 旧的主进程号

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

# ps -ef | grep nginx

4、 优雅的关闭

# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

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

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

查看

./nginx -V

已经平滑升级成功

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

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

(1)、给旧的主进程号发送HUP命令,此时nginx不重新读取配置文件的情况下重新启动旧主进程的工作进程。

kill -HUP 9944 --旧主进程号

重启工作进程

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

kill -QUIT 10012  --新主进程号
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!