Linux Nginx服务器 平滑升级和回退

一、热部署相关概念

1.1 nginx服务的进程

nginx是多进程结构,多进程结构设计是为了保证nginx的高可用高可靠,包含:

  • master进程:也是父进程,负责worker进程的管理。
  • worker进程:也是子进程,worker进程一般配置成与服务器的CPU核数相同,worker进程用来处理具体的请求的。
  • cache进程:也是子进程,包括cache manager和cache loader进程,主要是反向代理时做缓存使用。

1.2 nginx可进行热部署的原理

热部署,就是配置文件nginx.conf修改后,不需要stop Nginx,不需要中断请求,就能让配置文件生效,即在线升级,即不打断用户的请求下更新版本。 通过上文我们已经知道worker进程负责处理具体的请求,那么如果想达到热部署的效果,Nginx可以修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。然后使用新的配置创建新的 worker,所以可以做到在线更新版本,新版本和旧版本的进程可以同时存在,不影响客户的访问。

二、热部署之平滑升级及回滚

实验环境 :搭建成功版本为1.15.9的nginx服务器<上一篇>

1、添加上版本注释 vim src/core/nginx.h

在这里插入图片描述在这里插入图片描述
2、 回到编译之前的环境

1)删除之前安装的nginx目录:rm -fr /usr/local/nginx

  • 删除之前,先关闭nginx服务。

2)回到编译目录:make clean

在这里插入图片描述
3)查看当前nginx的进程 ps aux | grep nginx

在这里插入图片描述
4)再次编译:

./configure --prefix=/usr/local/nginx --with-file-aio

5)安装:make && make install
在这里插入图片描述

在这里插入图片描述

6)开启nginx:/usr/local/nginx/sbin/nginx
7)查看nginx的进程:ps aux|grep nginx
8)查看nginx的版本号:/usr/local/nginx/sbin/nginx -v
在这里插入图片描述

2.1 nginx平滑升级

1) 首先解压:tar zxf nginx-1.17.4.tar.gz
2)在 nginx-1.17.4目录下编译,./configure --prefix=/usr/local/nginx --with-file-aio

在这里插入图片描述
3)make

  • 注意:更新的时候不能make install,否则会将nginx服务之前配置全部还原

在这里插入图片描述
4)在nginx/nginx-1.17.4/objs/目录下,执行make后才产生的二进制文件nginx 。此时,执行命令./nginx -V查看nginx版本。发现版本为nginx/1.17.4 ,但是生效的版本还是nginx/1.15.9

  • make后objs/下出现了二进制执行文件nginx,make install 实际上就是将二进制执行文件和一些配置文件复制到/usr/local/nginx目录下

在这里插入图片描述

在这里插入图片描述

5)ps -ef | grep nginx可以看到原来的2个进程

在这里插入图片描述
6)kill -USR2 原master进程的pid 让旧版本的worker进程不再接受请求ps -ef | grep nginx可以看到4个进程

在这里插入图片描述
在这里插入图片描述
7)kill -WINCH 原来master进程的pid ,关闭原来进程的子进程,master不结束,防止更新失败ps -ef | grep nginx可以看到3个进程,此时新版本已经可以用了

在这里插入图片描述
8)/usr/local/nginx/sbin/nginx -V 可以看到版本已经更新了

在这里插入图片描述

此时,版本升级已经完成l。

2.2 nginx版本更新失败之后的回滚

假如我们刚才更新失败,要回到原来nginx/1.15.9的版本
1)还原nginx脚本

在这里插入图片描述

2)kill -HUP 旧版本的master进程PID,重新唤起旧版本的master进程,让其接收请求

在这里插入图片描述
3)
kill -USR2 27129,让新版本的master进程不接收请求
kill -WINCH 27129,关闭新版本的worker进程
在这里插入图片描述
在这里插入图片描述
4)查看nginx版本 :/usr/local/nginx/sbin/nginx -v

在这里插入图片描述
5)再次编译,且make就回滚了。

实际在企业当中,如果更新失败立马就要回滚,并且更新的时候只能进行一次,失败立马回滚

发布了105 篇原创文章 · 获赞 0 · 访问量 1411

猜你喜欢

转载自blog.csdn.net/weixin_45029822/article/details/104655287
今日推荐