首页 运维干货nginx升级与回退

nginx升级与回退

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

nginx1.16.1的部署安装我参考的这个博客https://www.cnblogs.com/FengGeBlog/p/13534156.html。先看下这个文章,然后一会我们对这个进行版本升级

注意:下文将1.16.1版本成为旧版本nginx,1.18.0成为新版本nginx

1、先确认旧的nginx进程是已经存在的

旧版本nginx启动进程

旧版本的nginx我已经启动了,设置5个worker进程。

2、开始编译安装新版本1.18.0的nginx

编译的步骤如下所示:

先获取旧版本nginx编译的选项

拿到这个选项,然后放在新版本nginx里面。执行configure

注意:有些人可能有疑惑,新下载的nginx在执行./configure的时候--prefix指定的目录是需要指向旧的nginx所指向的prefix目录还是随便指向一个就行,答案是需要指向旧版本的nginx的安装目录

执行make命令

执行完成之后不要执行make install指令,这点需要注意。

3、平滑升级

3.1、先备份旧的nginx二进制可执行程序

3.2、查看未升级前的nginx版本

3.3、找到nginx-1.18.0新版本的nginx的二进制执行程序

上面的这个nginx就是我们要拿到的新版本的nginx可执行程序文件。

3.4、使用nginx-1.18.0的二进制文件将nginx-1.16.1的二进制文件进行强制覆盖

3.5、设定旧的服务不再接收用户请求(下线),新服务启动子进程接收用户请求(上线)

先查看当前未升级的nginx进程(这是旧版本的nginx进程)

找到nginx父进程的pid号,现在对其发送USR2信号

再次查看进程

现在是nginx的新老版本的进程共存的一种情况。虽然现在旧版本的nginx进程还存在,但是已经不再接受用户的请求了。除此之外,旧版本的nginx进程也依然处于监听的状态,我们通过lsof命令可以看到,比如:

虽然在监听,但实际不会处理新连接,因为fd已经从epoll中移出了。另外,旧master是新master的父进程,所以新master才能共享打开的监听端口。保留旧版本的master是为了方便回滚(当然你可以发信号QUIT或者直接杀掉进程)

3.6、进行旧服务进程的关闭

再次查看当前nginx进程

可以看到现在的旧版本的nginx的worker进程已经全部被杀死了,只剩下的旧版本nginx的master进程

确定升级没有任何问题的话,那么现在我们可以把这个master进程给杀死掉。可以用kill -QUIT把旧master进程杀掉。方法已经教给大家了,但是这里我先不杀死,因为我还要往下演示如何回退。

3.7、查看当前nginx的版本

可以看到现在已经升级成功了。

还可以访问一下

4、现在我们演示一下如何回退

这种情况主要是用于当新版本的nginx升级失败之后,我们立马回退到旧版本的nginx

4.1、将旧版本的nginx二进制文件强行覆盖

查看进程

4.2、向旧版本nginx进程发送HUP信号

说明一下:这个命令就相当与reload指令的作用,把旧的nginx的worker进程拉起来,但是咱们并不是直接使用reload的方式来执行,而是发送HUP信号,它会在没有worker进程时启动worker进程,这点需要注意一下。
此时再次查看进程

发现多了很多worker进程,多出来的部分是旧版本的nginx进程。

4.3、让新版本的服务停止接收用户请求

此时,接收用户请求的是旧版本的nginx进程。新版本的nginx进程不再接受用户请求

4.4、进行新版本服务进程的关闭

查看一下进程

现在,旧版本已经回退成功了,我们可以把新版本的nginx的master进程发送QUIT进程将其退出。

4.5、kill掉新版本nginx进程

现在已经回退成功了

本文链接:http://www.yunweipai.com/37236.html

网友评论comments

发表评论

电子邮件地址不会被公开。

暂无评论

Copyright © 2012-2020 YUNWEIPAI.COM - 运维派
扫二维码
扫二维码
返回顶部