千家信息网

Nginx版本如何实现平滑升级与回滚

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章给大家分享的是有关Nginx版本如何实现平滑升级与回滚的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、环境介绍今天准备的两个nginx版本如下:[root@ngi
千家信息网最后更新 2025年12月03日Nginx版本如何实现平滑升级与回滚

这篇文章给大家分享的是有关Nginx版本如何实现平滑升级与回滚的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、环境介绍

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

[root@nginx ~]# cd /download/nginx/[root@nginx nginx]# lltotal 1952-rw-r--r-- 1 root root 981687 Oct 17 2017 nginx-1.12.2.tar.gz-rw-r--r-- 1 root root 1015384 Dec 4 09:58 nginx-1.14.2.tar.gz

2、编译安装新旧版本

编译安装nginx-1.12.2

[root@nginx nginx]# tar zxf nginx-1.12.2.tar.gz [root@nginx nginx]# cd nginx-1.12.2[root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx-1.12.2[root@nginx nginx-1.12.2]# echo $?0[root@nginx nginx-1.12.2]# make && make install[root@nginx nginx-1.12.2]# echo $?0[root@nginx nginx-1.12.2]# ll /usr/local/nginx-1.12.2/total 0drwxr-xr-x 2 root root 333 Mar 1 09:01 confdrwxr-xr-x 2 root root 40 Mar 1 09:01 htmldrwxr-xr-x 2 root root  6 Mar 1 09:01 logsdrwxr-xr-x 2 root root 19 Mar 1 09:01 sbin

编译安装nginx-1.14.2

[root@nginx ~]# cd /download/nginx/[root@nginx nginx]# tar zxf nginx-1.14.2.tar.gz [root@nginx nginx]# cd nginx-1.14.2[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx-1.14.2[root@nginx nginx-1.14.2]# echo $?0[root@nginx nginx-1.14.2]# make && make install[root@nginx nginx-1.14.2]# echo $?0[root@nginx nginx-1.14.2]# ls -l /usr/local/nginx-1.14.2/total 0drwxr-xr-x 2 root root 333 Mar 1 09:03 confdrwxr-xr-x 2 root root 40 Mar 1 09:03 htmldrwxr-xr-x 2 root root  6 Mar 1 09:03 logsdrwxr-xr-x 2 root root 19 Mar 1 09:03 sbin

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

3、启动旧版本nginx

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -tnginx: the configuration file /usr/local/nginx-1.12.2/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx-1.12.2/conf/nginx.conf test is successful[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6327  1244 0 09:06 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# lsof -i :80COMMAND PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAMEnginx  6324  root  6u IPv4 26324   0t0 TCP *:http (LISTEN)nginx  6325 nobody  6u IPv4 26324   0t0 TCP *:http (LISTEN)

4、升级到新版本

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

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -vnginx version: nginx/1.12.2[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/[root@nginx sbin]# mv nginx nginx-1.12.2#首先备份原来的旧版本nginx二进制文件[root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./#拷贝新版本的二进制文件到当前目录

接下来进行平滑升级操作

[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6338  1244 0 09:11 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# kill -USR2 6324[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6343  1244 0 09:12 pts/0  00:00:00 grep --color=auto nginx

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

[root@nginx ~]# kill -WINCH 6324[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6346  1244 0 09:14 pts/0  00:00:00 grep --color=auto nginx

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

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

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -vnginx version: nginx/1.14.2

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

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

kill -QUIT old_master_PID

5、版本回滚

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

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

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

[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6350  1244 0 09:23 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/[root@nginx sbin]# mv nginx nginx-1.14.2[root@nginx sbin]# mv nginx-1.12.2 nginx[root@nginx sbin]# kill -USR1 6324[root@nginx sbin]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6355  1244 0 09:24 pts/0  00:00:00 grep --color=auto nginx[root@nginx sbin]# ./nginx -vnginx version: nginx/1.12.2

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

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

感谢各位的阅读!关于"Nginx版本如何实现平滑升级与回滚"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

版本 升级 进程 平滑 面的 接下来 二进制 文件 编译 两个 内容 命令 好处 就是 更多 环境 用户 篇文章 结果 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 分布式数据库未来走势 王姗数据库课后题答案 便携式网络服务器 护理英文文献数据库有哪些 网络安全等保测评表 网络安全与病毒防范课好修吗 安师软件开发专科 思科网络技术教程几本书 数据库计算日期差的函数公式 华为服务器 h00 北京市鑫丹妮网络技术公司照片 郯城农商行网络安全 前端调用数据库 门头沟区综合软件开发服务保障 广电网络安全事件典型分析 软件开发项目培训方案模板 怎么安装网络安全管控 网络安全小报文字内容 渭南软件开发价格表 奉贤区个性化网络技术转让操作 预防网络安全广播稿 英雄联盟手游为什么找不到服务器 orecle数据库系统反应很慢 网络安全证书哪个专业好考 网络安全是动态的而不是静态 拼服务器名 企业为什么招聘软件开发工程师 宝山区工商数据库系统研发要求 服务器电源串联24v安全吗 网络安全主任是谁
0