当前位置:首页 > nginx > nginx部署 > 正文内容

nginx-平滑升级

nginx平滑升级是在服务不中断的情况下,将低版本的nginx升级到高版本,在升级的过程中可以继续响应服务请求


1、进行新版本nginx的编译

原nginx版本:1.14,路径:/opt/nginx-1.14

新nginx版本:1.18


注意:

只编译(make),不安装(make install)

新版本的nginx在编译时要与原版本的nginx编译参数、路径一致


编译完成后查看新nginx版本:

cd /root/nginx-1.18.0

objs/nginx -t -c /opt/nginx-1.14/conf/nginx.conf

测试编译程序是否可用:

objs/nginx -t -c /opt/nginx-1.14/conf/nginx.conf

查看原nginx版本:

/opt/nginx-1.14/sbin/nginx -v

image.png


2、替换原有nginx启动程序

备份原nginx二进制文件

cd /opt/nginx-1.14/sbin/

mv nginx nginx.old

 

将新编译的1.18版本的nginx二进制文件复制到原nginx的路径下

cp objs/nginx /opt/nginx-1.14/sbin/

chown -R nginx:nginx /opt/nginx/sbin


3、启动新版本的进程

查看原版本nginx(1.14)的master进程号

ps -ef | grep nginx

或:cat /opt/nginx/nginx.pid

image.png

nginx进程号为1524


发送USR2信号给旧版本进程号(1524),使旧nginx停止接受新的请求,同时启动新版本的nginx进程,并开始处理新的请求:

kill -SIGUSR2 `cat /opt/nginx-1.14/nginx.pid`

注意在脚本中执行要使用kill -USR2

 

这时在nginx目录下会生成一个新的nginx.pid文件,这是新的nginx的master进程号,旧的master进程号在nginx.pid.oldbin文件中

image.png


发送WINCH信号给旧版本进程号(1524),使旧nginx的worker进程处理完原有的请求后退出:

kill -WINCH `cat /opt/nginx-1.14/nginx.pid.oldbin`



查看新nginx的版本

image.png


查看此时nginx的进程,发现有两个nginx的master进程,新的master进程已经启动,进程号为1585

原nginx的worker进程已经退出,新的worker进程已经启动,1586、1587为新nginx的worker进程号

image.png


查看连接情况

image.png

此时我们发现所有的请求已经由新的worker进程处理

这时向原nginx的主进程发送退出信号

kill -QUIT 1524


旧的进程完全退出

image.png

nginx的平滑升级结束,成功由1.14升级到1.18


4、回退方案

平滑升级失败,新nginx的worker进程无法处理请求,执行回退:

向旧nginx的msater进程发送HUP信号,进程平滑重启

kill -HUP 1524

向新nginx的master发送QUIT信号,使其退出

Kill -QUIT 1585

回退成功


附:平滑升级脚本

nginx_update.sh

扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/87.html

分享给朋友:
返回列表

没有更早的文章了...

下一篇:nginx部署-源码

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。