nginx的平滑升级(热部署)

一、nginx的源码安装

[root@server1 nginx-1.14.2]# vim auto/cc/gcc 
# debug
#CFLAGS="$CFLAGS -g"(注销debug日志)


[root@server1 nginx-1.14.2]# yum install -y gcc pcre-devel zlib-devel(安装编译软件、依赖性软件)
[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx/

此时,objs目录如下:
在这里插入图片描述

[root@server1 nginx-1.14.2]# make && make  install(安装)

objs目录发生改变:
在这里插入图片描述

  • 设置Nginx的worker数:
    查看cpu内核数:
    在这里插入图片描述
    编辑nginx配置文件,worker数为自动。

      [root@server1 nginx]# vim conf/nginx.conf
      #user  nobody;
      worker_processes  auto;(worker数与cpu内核数相同或选取自动,根据访问数据自动调节worker数)
    

    [root@server1 nginx-1.14.2]# /usr/local/nginx/sbin/nginx (打开nginx服务)
    查看进程ps ax | grep nginx:
    在这里插入图片描述

  • 为使编辑文件更容易,我们为文件添加高光:

      [root@server1 ~]# mkdir .vim
      [root@server1 ~]# cd nginx-1.14.2/contrib/
      [root@server1 contrib]# ls
      geo2nginx.pl  README  unicode2nginx  vim
      [root@server1 contrib]# cp -r vim/* ~/.vim
      [root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
    

下图,文件有高光,便于提示我们错误。
在这里插入图片描述

二、平滑升级(热部署)

旧的mask和work开启时,被新的mask和work替换。新版本的不能make install

  • 安装nginx-1.15.8

     [root@server1 ~]# ls
     nginx-1.14.2  nginx-1.14.2.tar.gz  nginx-1.15.8.tar.gz
     [root@server1 ~]# tar zxf nginx-1.15.8.tar.gz 
     [root@server1 ~]# cd nginx-1.15.8
     [root@server1 nginx-1.15.8]# vim auto/cc/gcc 
     # debug
     #CFLAGS="$CFLAGS -g"(注销debug日志)
     [root@server1 nginx-1.15.8]# cd
     [root@server1 ~]# cd /usr/local/nginx/sbin/
     [root@server1 sbin]# cp nginx nginx_old(备份原版的执行脚本)
     [root@server1 nginx-1.15.8]# ./configure --prefix=/usr/local/nginx/
     [root@server1 nginx-1.15.8]# make
    

因为此时旧版本还在运行,所以要强制复制。
在这里插入图片描述
查看进程,此时只有原版本的一个master进程和两个work进程,通过kill信号拉起新的nginx服务。再查看nginx进程此时有两个master进程和两个work进程。之后的访问都会连接到新nginx服务上,但旧版本nginx的work进程此时仍在处理已接收的访问,等连接断开后,其自动关闭。但为限制持续连接,旧版nginx此时的连接时有时间限制的,到时间后自动关闭。
在这里插入图片描述
停止旧nginx,但master进程依然在,为防止新Nginx故障,可及时补救.
在这里插入图片描述
如果新服务出现故障,旧服务上线:
将备份好的原版nginx脚本覆盖掉新nginx的执行脚本。

[root@server1 sbin]# cp nginx_old nginx -f
cp: overwrite ‘nginx’? y

kill -HUP (重载)与reload相同
在这里插入图片描述
停止新nginx服务。查看进程,此时运行的work进程都是旧版nginx的进程。
在这里插入图片描述
此时查看运行的版本恢复成原版本

[root@server1 sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.14.2

可通过查看进程pid关闭服务

[root@server1 sbin]# cat /usr/local/nginx/logs/nginx.pid
6090
[root@server1 sbin]# kill -9 6090

猜你喜欢

转载自blog.csdn.net/weixin_43328213/article/details/87890003