Nginx平滑升级的详细操作方法

[ 2016-10-01 15:25:40 | 作者: admin ]
字号: | |
原文地址:1分钟搞定 Nginx 版本的平滑升级与回滚 https://www.cnblogs.com/youkanyouxiao/p/10468885.html

一、平滑升级概述
Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。


二、判断新版本是否兼容旧的配置文件
/usr/local/nginx-1.14.2/sbin/nginx -t

三、升级到新版本

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


接下来进行平滑升级操作
ps -ef|grep nginx 查看旧版的主进程PID

kill -USR2 30528(old_master_PID) 使用nginx新版再生成一个主进程

ps -ef|grep nginx 查看现在有2个主进程PID

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

kill -WINCH 30528(old_master_PID) 平滑停止老版主PID的子工作进程

ps -ef|grep nginx 看看子工作进程worker process是否已经关闭,只剩下老版的主PID

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

kill -QUIT 30528(old_master_PID) 如果测试没有问题,彻底终止老版主进程


四、版本回滚

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

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

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

ps -ef|grep nginx
cd /usr/local/nginx-1.12.2/sbin/
mv nginx nginx-1.14.2
mv nginx-1.12.2 nginx
kill -USR1 30528
ps -ef|grep nginx
从上面的结果发现,已经平滑的回滚的上一个版本,接下来测试是否能正常访问:
[最后修改由 admin, 于 2020-11-18 22:50:53]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2341

这篇日志没有评论。

此日志不可发表评论。