• 案例技巧---NGINX平滑升级


    一、解释nginx的平滑升级

    随着nginx越来越流行使用,并且nginx的优势也越来越明显,nginx的版本迭代也开始了加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理功能。伴随着nginx的广泛应用,版本升级必然是越来越快的,线上业务不能停,此时nginx的升级就是运维的重要工作了,下面就带大家一起来理解下nginx平滑升级。

    二、nginx平滑升级原理

    多进程模式下的请求分配方式

    Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。

    信号的接收和处理

    Nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。

    Nginx信号简介

    主进程支持的信号
    • TERMINT: 立刻退出
    • QUIT: 等待工作进程结束后再退出
    • KILL: 强制终止进程
    • HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
    • USR1: 重新打开日志文件
    • USR2: 启动新的主进程,实现热升级
    • WINCH: 逐步关闭工作进程
    工作进程支持的信号
    • TERMINT: 立刻退出
    • QUIT: 等待请求处理结束后再退出
    • USR1: 重新打开日志文件

    三、nginx平滑升级实战

    3.1 备份原Nginx二进制文件

    备份二进制文件和nginx的配置文件

    1. [root@iZ28t900vpcZ ~]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_$(date +%F)
    2. [root@iZ28t900vpcZ ~]#cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf_$(date +%F)

    3.2 编译新的nginx源码包

    编译新Nginx源码,安装路径需与旧版一致

    1. [root@iZ28t900vpcZ nginx-1.9.12]#./configure --prefix=/usr/local/nginx-1.9.12 --user=www --group=www --with-http_ssl_module --with-openssl=/path/to/openssl_src
    2. [root@iZ28t900vpcZ nginx-1.9.12]#make&make install

    3.3 发送USR2信号

    向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求

    1. [root@iZ28t900vpcZ ~]# ps -ef|grep nginx|grep -v grep
    2. root 900 Mar07 00:00:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx
    3. nginx 28475 900 11:32 00:00:00 nginx: worker process
    4. [root@iZ28t900vpcZ ~]#kill -USR2 900

    3.4 发送WITCH信号

    向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理

    1. [root@iZ28t900vpcZ ~]#kill -WITCH 900

    3.5 发送HUP信号

    如果这时需要回退,可向原Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件 。然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL)

    1. [root@iZ28t900vpcZ ~]#kill -HUP 900

    注:此步骤只需在回滚的时候执行即可

    3.6 升级完毕

    如果不需要回滚,可以将原Nginx主进程杀死(使用QUIT、TERM、或者KILL),至此完成热升级。

  • 相关阅读:
    分类和预测
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    字符串匹配的KMP算法
    灰度共生矩阵提取纹理特征源码
    redis永不过期,保留最新5条数据,StringUtils.join()等总结
    Session问题以及解决方案
    spring boot 配置 log4j2
    每日知识记载总结54
    spring cloud踩坑指南
    每日知识记载总结53
  • 原文地址:https://www.cnblogs.com/liuqiang0/p/8528009.html
Copyright © 2020-2023  润新知