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

简介: Nginx 版本的平滑升级与回滚

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

Nginx服务介绍与安装


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


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


1、环境介绍


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


[root@nginx ~]# cd /download/nginx/[root@nginx nginx]# lltotal 1952-rw-r--r--1 root root  981687 Oct 172017 nginx-1.12.2.tar.gz
-rw-r--r--1 root root 1015384 Dec  409: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  109:01 conf
drwxr-xr-x 2 root root  40 Mar  109:01 html
drwxr-xr-x 2 root root   6 Mar  109:01 logs
drwxr-xr-x 2 root root  19 Mar  109: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  109:03 conf
drwxr-xr-x 2 root root  40 Mar  109:03 html
drwxr-xr-x 2 root root   6 Mar  109:03 logs
drwxr-xr-x 2 root root  19 Mar  109: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 ok
nginx: 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       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63256324009:06 ?        00:00:00 nginx: worker process
root       63271244009:06 pts/0    00:00:00 grep--color=auto nginx
[root@nginx ~]# lsof -i :80COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   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       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63256324009:06 ?        00:00:00 nginx: worker process
root       63381244009:11 pts/0    00:00:00 grep--color=auto nginx
[root@nginx ~]# kill -USR2 6324[root@nginx ~]# ps -ef|grep nginxroot       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63256324009:06 ?        00:00:00 nginx: worker process
root       63406324009:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63416340009:12 ?        00:00:00 nginx: worker process
root       63431244009:12 pts/0    00:00:00 grep--color=auto nginx


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


[root@nginx ~]# kill -WINCH 6324[root@nginx ~]# ps -ef|grep nginxroot       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
root       63406324009:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63416340009:12 ?        00:00:00 nginx: worker process
root       63461244009:14 pts/0    00:00:00 grep--color=auto nginx

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

微信图片_20211224231514.jpg

可以正常访问,其实这一平滑升级的动作,对访问用户来说是完全感知不到,所以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       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
root       63406324009:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63416340009:12 ?        00:00:00 nginx: worker process
root       63501244009: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       63241009:06 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
root       63406324009:12 ?        00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody     63416340009:12 ?        00:00:00 nginx: worker process
root       63551244009:24 pts/0    00:00:00 grep--color=auto nginx
[root@nginx sbin]# ./nginx -vnginx version: nginx/1.12.2


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


微信图片_20211224231514.jpg

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

相关文章
|
4月前
|
应用服务中间件 Linux 网络安全
CentOS 7.4源码编译nginx1.12 并且隐藏nginx的版本
CentOS 7.4源码编译nginx1.12 并且隐藏nginx的版本
101 0
|
6天前
|
应用服务中间件 Linux nginx
Nginx镜像支持哪些版本?
Nginx镜像支持哪些版本?
23 1
|
2月前
|
负载均衡 网络协议 应用服务中间件
Nginx配置以及热升级
Nginx配置以及热升级
50 7
|
2月前
|
应用服务中间件 nginx
Ngnix07---通过yum安装Ngnix下 whereis ngnix可以查看Ngnix相关的一些目录,使用./nginx -y可以查看Ngnix版本及相关配置信息,使用 more CHANGES
Ngnix07---通过yum安装Ngnix下 whereis ngnix可以查看Ngnix相关的一些目录,使用./nginx -y可以查看Ngnix版本及相关配置信息,使用 more CHANGES
|
3月前
|
tengine 安全 应用服务中间件
修改Nginx/Tengine版本名称伪装任意WEB SERVER
修改Nginx/Tengine版本名称伪装任意WEB SERVER
|
4月前
|
应用服务中间件 网络安全 nginx
nginx 常用命令 |升级到1.20.1版本 | 如何更换 Nginx SSL 证书
nginx 常用命令 |升级到1.20.1版本 | 如何更换 Nginx SSL 证书
365 0
|
4月前
|
存储 Linux 应用服务中间件
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
165 1
|
4月前
|
缓存 应用服务中间件 网络安全
nginx服务升级配置
nginx服务升级配置
|
12月前
|
负载均衡 应用服务中间件 Linux
CentOS 系列版本搭建 Nginx 服务
Nginx 是一个广泛使用的Web服务器和反向代理服务器。 反向代理和负载均衡:Nginx支持反向代理和负载均衡,能够分发请求到多个后端服务器,提高了可用性和性能。 SSL/TLS支持:Nginx支持SSL/TLS协议,使您能够配置HTTPS并提供安全的数据传输。 低资源消耗:Nginx设计得非常轻量,占用较少的内存和CPU资源,因此在资源受限的环境中表现出色。 简单的配置:Nginx的配置文件易于理解和维护,使管理员能够快速进行配置更改。
89 1