nginx实现热部署(平滑升级)

这里我们使用的是上一篇文章封装好的rhel7.3的虚拟机,主机名修改成了server1

环境:

          虚拟机server1:rhel7.3系统

          软件:nginx-1.14.2.tar.gz、nginx-1.15.8.tar.gz  ==> 点击下载

我们这里的思想是热部署将nginx-1.14.2版本升级到nginx-1.15.8

整个热部署的思想是

修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。

1.编译安装nginx(旧版本)

这里我使用lftp将两个包放在了封装好已经可以使用的虚拟机上,只需要解压编译安装即可

  1.  
    tar zxf nginx-1.14.2.tar.gz
  2.  
    yum install gcc zlib-devel pcre-devel -y
  3.  
    cd nginx-1.14.2
  4.  
    vim auto/cc/gcc ##屏蔽其中的debug
  5.  
    ./configure --prefix=/usr/local/nginx
  6.  
    make&&make install

这样nginx就成功的安装在了server1上了,此时我们可以查看nginx的版本

/usr/local/nginx/sbin/nginx -v

开启nginx

/usr/local/nginx/sbin/nginx

2.编译新的nginx版本,并获取二进制文件

  1.  
    tar zxf nginx-1.15.8.tar.gz
  2.  
    cd nginx-1.14.2
  3.  
    vim auto/cc/gcc ##屏蔽其中的debug
  4.  
    ./configure --prefix=/usr/local/nginx  #路径和之前安装一样
  5.  
    make ##切忌不要make install
  6.  
    cd objs
  7.  
    ls ##如下图所示,nginx是我们需要的二进制文件

 

3.热部署

我们可以使用以下命令查看nginx的进程

ps -ef |grep nginx	##查看nginx的进程

开始之前,我们首先要进行一个备份,回滚的时候会用到

  1.  
    cd /usr/local/nginx/sbin
  2.  
    cp nginx nginx.old ##这样就备份了老的nginx

结下来就可以进行部署了

  1.  
    cp -f /root/nginx-1.15.8/objs/nginx /usr/local/nginx/sbin/
  2.  
    kill -USR2 2086 ##相当于reload
  3.  
    ps -ef | grep nginx
  4.  
    kill -WINCH 2086 ##相当于kill -9
  5.  
    ps -ef | grep nginx
  6.  
    /usr/local/nginx/sbin/nginx -v

如上图所示,当我们替换掉nginx二进制文件以后,我们使用kill -USR2使新的nginx上线,然后使用kill -WINCH命令杀掉原来的进程,查看版本号,就已经是1.15了

4.回滚

如果我们发现升级有问题,我们想回滚怎么办呢?

  1.  
    cp -f /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
  2.  
    ps -ef |grep nginx

  1.  
    kill -HUP 2104
  2.  
    ps -ef |grep nginx
  3.  
    kill -USR2 2104
  4.  
    kill -WINCH 2104
  5.  
    ps -ef |grep nginx
  6.  
    /usr/local/nginx/sbin/nginx -v

这样就回滚回了1.14版本

ok~

**************只要学不死就往死里学!************
原文地址:https://www.cnblogs.com/lxhaaron/p/14239672.html