nginx-平滑升级

    科技2022-08-24  104

    我这里举例的时1.13.9升级到1.14.2版本

    当前版本是1.13.9,nginx主进程id是1533

    1·备份

    将当前的nginx安装目录备份一下,以防外一

    cp -r nginx nginx_1.13.9

    2·重新编译安装

    记住要安装到当前nginx的安装目录中

    2.1 升级版本

    将新的nginx版本安装包,按照我另一个文章nginx-安装&启动&停止&平滑重启的步骤进行安装

    ./configure  --prefix=/usr/local/nginx 

    make

    make install

    2.2 添加、删除模块

    在原先的版本的nginx安装包下,重新走一遍安装流程,在./configure  的时候选择需要编译的模块

    2.3 安装完之后检查版本

    安装完之后,监察下版本,已经是1.14.2了

    3·新旧并行

    kill -USR2 1533(旧版本主进程id)

    旧版本nginx的主进程将重命名它的.pid文件问.oldbin(如下面截图)

    然后会执行新版本的nginx可执行程序,依次启动新版本的主进程和新的worker进程(如下面截图,4657就是新版本nginx的主进程)

    此时,新旧版本的nginx实例会同时运行,共同处理输入的请求。

    4·停老版本nginx的worker进程

    开始停老版本nginx的实例,发送WINCH信号给老版本nginx的进程,从容关闭老版本nginx的worker进程(主进程不关闭)

    kill -WINCH 1533(旧版本主进程id)

    一段时间之后,老版本的工作进程处理完自己所有已连接的请求后退出,由新版本的工作进程来处理输入的请求。

    下面截图可以看到。老版本nginx的worker进程已经都不在了,只剩主进程还在

    5·决定完成升级还是回退

    此时,可以决定是使用新版本还是恢复到旧版本

    5.1 完成升级,使用新版本

    kill -QUIT 1533(旧版本主进程id)

    这样就只剩下新版本nginx的进程了,如下面截图

    5.2 回退

    kill -HUP 1533(旧版本主进程id)【旧版本nginx会在不重载配置文件情况下启动工作进程】

    kill -QUIT 4657 (新版本主进程id)【从容关闭新版本nginx的worker进程】

    kill -TERM 4657(新版本主进程id)【强制退出新版本的nginx】

     

    Processed: 0.008, SQL: 9