zoukankan      html  css  js  c++  java
  • nginx平滑升级

    转载请注明转自: 存储系统研究, 本文固定链接:nginx平滑升级


    1. nginx平滑升级

    当我们开发了一个新的nginx模块,须要升级nginx binary时,须要进行下面的步骤:

    a) 替换老的nginx binary

    [root@lg-miui-file-mfs09 sbin]# mv nginx nginx.old
    [root@lg-miui-file-mfs09 sbin]# scp guojun1@10.237.92.30:/usr/local/nginx/sbin/nginx .
    guojun1@10.237.92.30's password:
    nginx
    b) 向old master process 发送SIGUSR2信号[root@lg-miui-file-mfs09 sbin]# kill -s SIGUSR2 16236nginx.pid文件会被重命名为nginx.pid.oldbin,而且执行新的nginx binary文件,此时新老版本号会同一时候执行:
    [root@lg-miui-file-mfs09 sbin]# ll ../logs/
    total 14392
    -rw-r--r-- 1 guojun1  500     893 May 30 10:58 error.log
    -rw-r--r-- 1 guojun1  500 5617929 May 12 13:12 nginx-access.log
    -rw-r--r-- 1 guojun1  500 9102050 May 13 22:39 nginx-error.log
    -rw-r--r-- 1 root    root       6 May 30 10:58 nginx.pid
    -rw-r--r-- 1 root    root       6 May 30 10:58 nginx.pid.oldbin
    [root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
    root     16236  0.0  0.0  92920  3064 ?

    Ss 10:58 0:00 nginx: master process ./nginx root 16237 0.0 0.0 94992 3988 ? S 10:58 0:00 nginx: worker process root 16238 0.0 0.0 94992 3988 ? S 10:58 0:00 nginx: worker process root 16239 0.0 0.0 94992 3988 ?

    S 10:58 0:00 nginx: worker process root 16385 0.0 0.0 92924 6072 ? S 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process root 16445 0.0 0.0 103244 852 pts/4 S+ 10:58 0:00 grep nginx

    c) 向old master process发送SIGWINCH此时,master会”优雅地”关闭它的工作进程:
    [root@lg-miui-file-mfs09 sbin]# kill -s SIGWINCH 16236
    [root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
    root     16236  0.0  0.0  92920  3072 ?

    Ss 10:58 0:00 nginx: master process ./nginx root 16385 0.0 0.0 92924 6072 ?

    S 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process

    d) 关闭old master假设查看log发送更新成功,能够关闭old master,此时向old master进程发送SIGQUIT,仅仅留下新的server执行。
    [root@lg-miui-file-mfs09 sbin]# kill -s SIGQUIT 16236
    [root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
    root     16385  0.0  0.0  92924  6072 ?

    S 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? S 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? S 10:58 0:00 nginx: worker process

    2. 回滚

    假设我们在关闭老的工作进行之后查看log发现新的nginx server执行有问题,我们能够回滚到老的版本号。其过程例如以下:

    a) 启动老的worker 进程能够通过向old master 进程发送SIGHUP信号,让其启动老的worker 进程。

    [root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
    root     16385  0.0  0.0  92924  6072 ?        S    10:58   0:00 nginx: master process ./nginx
    root     44583  0.0  0.0  92924  6076 ?

    S 11:57 0:00 nginx: master process ./nginx root 44584 0.0 0.0 94996 3984 ? S 11:57 0:00 nginx: worker process root 44585 0.0 0.0 94996 3984 ? S 11:57 0:00 nginx: worker process root 44586 0.0 0.0 94996 3984 ?

    S 11:57 0:00 nginx: worker process root 44757 0.0 0.0 94996 3908 ? S 11:58 0:00 nginx: worker process root 44758 0.0 0.0 94996 3980 ? S 11:58 0:00 nginx: worker process root 44759 0.0 0.0 94996 3980 ?

    S 11:58 0:00 nginx: worker process

    b) 关闭新的master进程和worker进程向新的master进程发送SIGQUIT信号。关闭新的master进程和worker进程;
    [root@lg-miui-file-mfs09 sbin]# kill -s SIGQUIT 44583
    [root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
    root     16385  0.0  0.0  92924  6072 ?        S    10:58   0:00 nginx: master process ./nginx
    root     44757  0.0  0.0  94996  3908 ?        S    11:58   0:00 nginx: worker process
    root     44758  0.0  0.0  94996  3980 ?        S    11:58   0:00 nginx: worker process
    root     44759  0.0  0.0  94996  3980 ?        S    11:58   0:00 nginx: worker process
    

    假设新的master进程因为某些原因hung住了没有关闭,能够向它们发送SIGTERM或者SIGKILL信号。当新的master进程退出后。老的master进程会将nginx.pid.oldbin文件重命名为nginx.pid. 


    參考文献:

    Nginx:http://wiki.nginx.org/CommandLine#Upgrading_To_a_New_Binary_On_The_Fly

    陶辉。深入理解Nginx模块开发与架构解析

  • 相关阅读:
    application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用
    SpringBoot项目打war包部署Tomcat教程
    spring boot 集成 redis lettuce
    spring boot maven打包可运行jar包
    IDEA项目搭建十四——Web站点Controller基类及布局页静态资源设计
    Nginx Windows详细安装部署教程
    多线程编程CompletableFuture与parallelStream
    IDEA项目搭建十三——服务消费端与生产端通信实现
    【异常】MySQL建表报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"order"' at line 1
    【警告】mysql链接警告信息:Establishing SSL connection without server's identity verification is not recommended
  • 原文地址:https://www.cnblogs.com/llguanli/p/7295716.html
Copyright © 2011-2022 走看看