写点什么

1 分钟搞定 Nginx 版本的平滑升级与回滚

用户头像
民工哥
关注
发布于: 2021 年 04 月 15 日
1分钟搞定 Nginx 版本的平滑升级与回滚

Nginx 无论是对于运维、开发、还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于 Nginx 相关的文章:


Nginx服务介绍与安装


Nginx服务配置文件介绍


Nginx配置虚拟主机


Nginx反向代理负载均衡配置


Nginx+Tomcat多实例及负载均衡配置


HTTP服务器Nginx服务介绍续


Nginx优化配置详解


Nginx+keepalived高可用配置实战


Apache VS Nginx,你选对了吗?


基于 Nginx 的 HTTPS 性能优化实践


Nginx 到底可以做什么?看完这篇你就懂了!


深度总结|深入浅出Nginx


终极指南:提高Nginx服务器硬度的12个技巧


有兴趣的可以看看上面的文章。


今天,我们来聊一聊,在企业实际生产环境中经常遇到的一个情况,升级 Nginx 到新的版本和如何回滚至旧版本。


1、环境介绍


今天准备的两个 nginx 版本如下:


[root@nginx ~]# cd /download/nginx/
复制代码


2、编译安装新旧版本


编译安装 nginx-1.12.2


[root@nginx nginx]# tar zxf nginx-1.12.2.tar.gz 
复制代码


编译安装 nginx-1.14.2


[root@nginx ~]# cd /download/nginx/
复制代码


到这里,两个版本的 nginx 软件已经部署完成。


3、启动旧版本 nginx


[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -t
复制代码


4、升级到新版本


版本升级其实就是针对二进制文件的升级,过程如下:


[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v
复制代码


接下来进行平滑升级操作


[root@nginx ~]# ps -ef|grep nginx
复制代码


这时新的 master 进程已经正常开启,但老的 work 进程也存在,所以我们使用下面的命令,将老的 work 进程发出平滑停止的信号,如下:


[root@nginx ~]# kill -WINCH 6324
复制代码


此时,老的 work 进程已经停止,接下来我们测试是否能正常访问:



可以正常访问,其实这一平滑升级的动作,对访问用户来说是完全感知不到,所以 nginx 热部署就已经完成了。


[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v
复制代码


查看版本也是最新的版本,升级完成。


注:如果在版本升级完成后,没有任何问题,需要关闭老的 master 进程的话,可以使用下面的命令:


kill -QUIT old_master_PID
复制代码


5、版本回滚


对于升级来说,最难的不是升级,而是回滚,因为在实际生产环境回滚的机率是存在,比如:新版本由于某些未知 bug 导致与现有应用不兼容、或出现运行不稳定的情况等等。


所以,对运维工程师来说,故障回滚是重点。


在上面的结果中,我们也能看到老的 master 进程是一直存在,在没有手工关闭前,它是不会自已关闭的,这种设计是有好处的,好处就是为了升级新版本后,如果出现问题能及时快速的回滚到上一个稳定版本。


[root@nginx ~]# ps -ef|grep nginx
复制代码


从上面的结果发现,已经平滑的回滚的上一个版本,接下来测试是否能正常访问:



一样可以正常访问,所以,这个回滚的操作对用户来说也是不可感知的。


好拉,今天的生产小技巧就分享到这里,如果你觉得这篇文章对你有所帮助或参考与借鉴,请将此文章转发分享出去,你的转发就是对我最大的支持!!

发布于: 2021 年 04 月 15 日阅读数: 11
用户头像

民工哥

关注

公众号:民工哥技术之路 微信mingongge2019 2018.04.16 加入

10多年 IT 职场老司机,坚持自学一路从技术小白成长为互联网企业信息技术部门的负责人。 《Linux系统运维指南 从入门到企业实战》作者。专注Linux系统、架构、集群、分布式、中间件等后端开源技术分享。

评论

发布
暂无评论
1分钟搞定 Nginx 版本的平滑升级与回滚