• 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

  • 相关阅读:
    (Good Bye 2019) Codeforces 1270B Interesting Subarray
    (Good Bye 2019) Codeforces 1270A Card Game
    Codeforces 1283D Christmas Trees(BFS)
    Codeforces 1283C Friends and Gifts
    Codeforces 1283B Candies Division
    1095 Cars on Campus (30)
    1080 Graduate Admission (30)
    1099 Build A Binary Search Tree (30)
    1018 Public Bike Management (30)
    1087 All Roads Lead to Rome (30)
  • 原文地址:https://www.cnblogs.com/diantong/p/11103983.html
Copyright © 2020-2023  润新知