• Nginx在线服务状态下平滑升级或新增模块


      nginx在使用过程中,有时需要在不影响当前业务的情况下,进行升级或新增模块。nginx的升级有两种方法:1.半自动化升级;2.手动升级

      不过都需要先查看安装的nginx版本和配置信息,然后前往官网下载所需的版本,并上传

    [root@youxi1 ~]# nginx -V
    nginx version: nginx/1.14.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module
     --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
    

      下载地址:http://nginx.org/en/download.html

    一、半自动化升级

      半自动化升级,其实就是在最后迁移的时候不使用make install,而使用源码自带的升级命令make upgrade来自动完成。

    (1).解压文件,并编译(只编译不安装)

      只编译不安装。./configure后面的参数可以保持一致,也可以改动;另外我这里指定了--with-pcre,需要保证后面的参数存在。

    [root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/
    [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/
    [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
    [root@youxi1 nginx-1.16.0]# make -j 4  //这里指定的是CPU内核数量,加快编译速度
    [root@youxi1 nginx-1.16.0]# echo $?
    0
    

    (2).备份旧的二进制文件,复制新的二进制文件到nginx目录

    [root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old}  //备份
    [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/  //复制
    

    (3).执行升级语句

    [root@youxi1 nginx-1.16.0]# make upgrade
    /usr/local/nginx/sbin/nginx -t  //查看配置文件是否正确,这里使用的是刚复制过来的nginx二进制文件
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`  //发送平滑迁移信号给旧的nginx进程
    sleep 1  //等待1秒
    test -f /usr/local/nginx/logs/nginx.pid.oldbin  //检测旧的nginx.pid进程是否变为nginx.pid.oldbin
    kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`  //结束工作进程,完成此次升级
    

      test -f [文件]如果为一个普通文件,则为真。这里用来判断文件是否存在。

      手动升级其实就是使用打印出来的这些语句,加上kill –WINCH `cat /usr/local/nginx/log/nginx.pid.oldbin`(从容关闭nginx.pid.oldbin)和kill –HUP `cat /url/local/nginx/log/nginx.pid.oldbin`(不重启旧的nginx进程)。

    (4).检测是否升级成功

      首先看看是否正在运行

    [root@youxi1 nginx-1.16.0]# ps aux | grep nginx  //查看是否正常运行,如果之前就能使用systemctl,也可以使用systemctl查看
    nginx      1338  0.0  0.1 216972  6244 ?        S    13:08   0:00 php-fpm: pool www
    nginx      1340  0.0  0.1 216972  6244 ?        S    13:08   0:00 php-fpm: pool www
    root       7556  0.0  0.0  18252  1728 ?        S    17:05   0:00 nginx: master process /usr/local/nginx/sbin/nginx
    nginx      7557  0.0  0.0  18624  1360 ?        S    17:05   0:00 nginx: worker process
    root       7563  0.0  0.0 112724   988 pts/0    S+   17:06   0:00 grep --color=auto nginx
    

      接着看看配置文件是否有错,还有nginx的版本和配置选项信息。我能直接使用nginx是因为配置了环境变量。

    [root@youxi1 nginx-1.16.0]# nginx -t  //查看配置文件是否有错
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@youxi1 nginx-1.16.0]# nginx -V  //查看版本和配置选项信息
    nginx version: nginx/1.16.0
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
    

      最后使用Windows查看

    二、手动升级

      手动升级和半自动化升级大同小异,只是在执行升级语句时,手动输入打印的命令

    (1).解压文件并编译

      只编译不安装。./configure后面的参数可以保持一致,也可以改动;另外我这里指定了--with-pcre,需要保证后面的参数存在。

    [root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/
    [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/
    [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
    [root@youxi1 nginx-1.16.0]# make -j 4  //这里指定的是CPU内核数量,加快编译速度
    [root@youxi1 nginx-1.16.0]# echo $?
    0
    

    (2).备份旧的二进制文件,复制新的二进制文件到nginx目录

    [root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old}  //备份
    [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/
    nginx.old
    [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/  //复制
    [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/
    nginx nginx.old
    

    (3).执行取代make upgrade的命令

      注意:这里的nginx.pid(nginx进程文件)所在地址不是固定的,需要查看nginx目录下的conf/nginx.conf配置文件

    [root@youxi1 nginx-1.16.0]# /usr/local/nginx/sbin/nginx -t  //查看配置文件是否正确,这里使用的是刚复制过来的nginx二进制文件
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@youxi1 nginx-1.16.0]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`    //发送平滑迁移信号给旧的nginx
    [root@youxi1 nginx-1.16.0]# test -f /usr/local/nginx/logs/nginx.pid.oldbin  //我们判断是否平滑迁移到nginx.pid.oldbin,test -f与echo $?的组合
    [root@youxi1 nginx-1.16.0]# echo $?
    0
    [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/logs/nginx.pid*  //判断是否平滑迁移也可以ls命令查看是否存在nginx.pid.oldbin文件
    /usr/local/nginx/logs/nginx.pid /usr/local/nginx/logs/nginx.pid.oldbin
    [root@youxi1 nginx-1.16.0]# kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`  //从容关闭nginx进程
    [root@youxi1 nginx-1.16.0]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin`  //不重启旧的nginx进程
    [root@youxi1 nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`  //结束工作进程,完成此次升级
    

      test -f [文件]和echo $?组合判断平滑迁移,与直接ls [文件]判断平滑迁移只要使用一个就可以了。

    (4).检测是否升级成功

      首先看看是否正在运行

    [root@youxi1 nginx-1.16.0]# ps aux | grep nginx
    nginx      1307  0.0  0.1 216972  6244 ?        S    10:34   0:00 php-fpm: pool www
    nginx      1308  0.0  0.1 216972  6244 ?        S    10:34   0:00 php-fpm: pool www
    root       7476  0.0  0.0  18252  1728 ?        S    10:45   0:00 nginx: master process /usr/local/nginx/sbin/nginx
    nginx      7477  0.0  0.0  18624  1360 ?        S    10:45   0:00 nginx: worker process
    nginx      7493  0.0  0.0  18600  1344 ?        S    10:47   0:00 nginx: worker process
    root       7571  0.0  0.0 112724   988 pts/0    S+   11:08   0:00 grep --color=auto nginx

      接着看看配置文件是否有错,还有nginx的版本和配置选项信息。我能直接使用nginx是因为配置了环境变量。

    [root@youxi1 nginx-1.16.0]# nginx -V
    nginx version: nginx/1.16.0
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module
     --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
    

      最后使用Windows查看

    参考:https://blog.csdn.net/xiaolong20081/article/details/82871878

       https://www.cnblogs.com/happlyp/p/6090409.html

  • 相关阅读:
    google说 老子 = I !
    昨日种种死 今日种种生
    设定Access数据库自增长字段初始值
    [c路历程]品品数组这杯茶
    爱上位运算
    .Net中的委托
    Jquery css函数用法(判断标签是否拥有某属性)
    记录几条简单的正则表达式
    ASP.NET MVC中DropDownList的使用
    C#如何获取object对象的属性值
  • 原文地址:https://www.cnblogs.com/diantong/p/11103983.html
Copyright © 2020-2023  润新知