关于Nginx热部署的细节分析


文章目录

  • 前言
  • 一、环境准备
  • 二、热部署步骤
  • 总结


前言

Nginx由于其高并发、高性能、可扩展性好、高可靠性、热部署、BSD许可证等优势被广泛使用,本人主要针对热部署的部分展开说明热部署的具体步骤以及步骤背后发生的具体事情。

本次热部署采用的Nginx版本号为,旧版本Nginx为1.24.0,新版本为1.26.0

一、环境准备

  1. 下载Nginx源码包,下载链接如下:
    • nginx-1.24.0
    • nginx-1.26.0
  2. 上传下载的源码包到服务器(本次上传路径为/data/ivan/packages)
    在这里插入图片描述
  3. 解压nginx-1.24.0的压缩包
    tar -zxvf nginx-1.24.0.tar.gz
    
    在这里插入图片描述
    解压完成后如下图
    在这里插入图片描述
  4. 编译安装Nginx-1.24.0
    cd nginx-1.24.0/
    ./configure --prefix=/data/ivan/nginx-1.24.0
    make && make install
    
    上述命令中/data/ivan/nginx-1.24.0目录为创建好用以保存Nginx的二进制文件、配置文件等文件的目录。
  5. 启动Nginx
    cd /data/ivan/nginx-1.24.0/
    ./sbin/nginx
    

二、热部署步骤

  1. 将旧Nginx二进制文件换成新Nginx二进制文件(注意备份)

    # 进入源码包存放路径,解压nginx-1.26.0压缩包
    cd /data/ivan/packages/
    tar -zxvf nginx-1.26.0.tar.gz
    # 编译新版Nginx二进制文件(这里的编译参数必须与旧Nginx二进制文件的编译参数保持一致)
    ./configure --prefix=/data/ivan/nginx-1.24.0
    make
    # 进入nginx二进制存放目录,备份旧Nginx二进制文件
    cd /data/ivan/nginx-1.24.0
    cp nginx nginx.old
    # 用新编译的二进制文件覆盖原二进制文件,必须使用-f参数,否则无法覆盖
    cp -rp objs/nginx /data/ivan/nginx-1.24.0/sbin/ -f
    
  2. 向master进程发送USR2信号

    # 通过ps命令查看Nginx的master进程的pid
    ps -ef | grep nginx
    

    发送信号前,Nginx只有一个Master进程:
    在这里插入图片描述

    # 向master进程发送USR2信号
    kill -USR2 9893
    

    发送信号后,Nginx的Master进程变成两个,并且可以看出,新Master进程是旧Master进程的子进程
    在这里插入图片描述
    此时,旧nginx进程仍然在LISTEN,只是不会去处理这个socket,因为没有把它加到epoll中。master进程打开监听端口,但不处理,由worker进程处理。另外,旧master是新master的父进程,所以新master才能共享打开的监听端口。
    在这里插入图片描述
    同时,旧Master进程的旧pid文件会变成nginx.pid.oldbin,新Master进程的pid文件会写进nginx.pid
    在这里插入图片描述

  3. 向旧Master进程发送WINCH信号
    执行如下命令:

    kill -WINCH 9893
    

    执行完成后再次查看nginx进程,会发现旧Master进程的worker进程已经停止工作,旧Master进程仍在运行,说明所有的请求已全部切换到新的Master进程。
    在这里插入图片描述
    但是我们发现旧的Master进程没有自动退出,这是因为有可能升级Nginx之后会出现一些问题,保留这个Master进程是为了在有问题的情况下,可以向旧的Master进程发送RELOAD命令(对应HU信号),把旧的Worker进程重新拉起来,实现版本回滚。回滚方式如下:

    # 向老Master进程发送HUP信号
    kill -HUP 9893
    # 向新Master进程发送QUIT信号
    kill -QUIT 12682
    
  4. 向旧Master进程发送QUIT信号

    kill -QUIT 9893
    

    执行完成后再次查看nginx进程,可以发现现在只剩新Master进程及其worker进程正在运行,旧Master进程已完全退出,Nginx升级完成(这里进程号发生变化是因为在这之前测试了下重启步骤,重新执行升级步骤导致新Master进程号发生变化)
    在这里插入图片描述


总结

Nginx提供了非常便捷的热重载的升级方式,能有效保证服务不中断的情况下执行Nginx的升级任务,并且提供了快速的回退方法,这对业务容忍度很低的业务系统来说是非常好用的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CentOS 7上配置Elasticsearch开启自启动需要通过systemd服务管理器来实现

在CentOS 7上配置Elasticsearch开启自启动需要通过systemd服务管理器来实现。 1. 安装Elasticsearch 首先,确保你已经安装了Elasticsearch。如果还没有安装,可以按照以下步骤进行安装: # Import the Elasticsearch PGP key sudo rpm --import https://artifacts.elastic.…

常见设计模式之Java实现

引言 设计模式是软件工程中的一套被反复使用的、大家公认的、经过分类编目的代码设计经验的总结。它们是解决特定问题的模板,可以提高代码的可重用性、可读性和可维护性。本文将介绍Java中常见的20种设计模式,并提供具体的使用场景、设计模式的解释以及…

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象,实则不然,就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等,不知道请看这篇文章(Touch事件传递流…

GitHub打不开的解决方案

1、打开https://sites.ipaddress.com/github.com/找到DNS Resource Records,复制github的ip地址,先保存起来: 140.82.112.32、打开https://sites.ipaddress.com/fastly.net/找到DNS Resource Records,复制其中一个ip地址&#xf…

基于Nacos实现Sentinel规则持久化

基于Nacos实现Sentinel规则持久化 一、Sentinel使用痛点二、解决方案2.1 保存本地文件2.2 保存数据库2.3 保存到Nacos 三、规则持久化到Nacos3.1 Nacos服务端修改配置3.2 Sentinel控制台修改配置3.3 Nacos数据源整合到Sentinel中 一、Sentinel使用痛点 SpringCloudAlibaba帮我…

迷你手持小风扇哪个牌子质量好点?这五款迷你手持小风扇不要错过

随着空调的普及,我们对夏日热浪的抵抗力逐渐减弱。当从凉爽的空调屋步入闷热的户外、拥挤的交通工具或公共场所时,如何抵御热浪的侵袭成为大众关注的焦点。在这样的背景下,迷你手持小风扇凭借其便携性和即时降温功能,成为众多人的…

341_C++_使用C++中的std::map容器查找键的时候,注意给个默认值,防止成员函数value()未查找到键,确保即使键不存在,你也能安全地获取一个值

在C++中,std::map是一个关联容器,它存储的元素都是键值对(key-value pairs),并且按键(key)自动排序。 std::map有一个成员函数value(),它用于返回与给定键相关联的值。如果该键在map中不存在,则value()函数返回提供的默认值。 map<int, int> mKeyMaps; int ke…

降价!免费!AI大模型开启价格战,企业如何“薅”出绿色财富?

近期&#xff0c;国内大模型技术供应商之间的价格战&#xff0c;使得这项原本成本较高的技术变得更加亲民&#xff0c;极大降低了企业的技术采用门槛。这不仅为企业提供了经济实惠的技术解决方案&#xff0c;更为他们的绿色低碳转型之路带来了新的机遇。 随着全球气候变化问题…

MySQL -- 相关知识点

1.数据库相关介绍 数据库的选择通常取决于具体的应用需求&#xff0c;如性能、扩展性、数据一致性和易用性等因素。 1. 关系型数据库&#xff08;RDBMS&#xff09; MySQL&#xff1a; 广泛使用的开源数据库&#xff0c;支持大多数操作系统。强调易用性、灵活性和广泛的社区支…

基于Java+MySQL+Swing的学生管理系统

1.系统简介和开发背景 该同学工作积极主动、高效&#xff0c;学习认真&#xff0c;待人诚恳&#xff0c;能够做到服从指挥、认真听取老同志的指导&#xff0c;不怕苦、不怕累&#xff0c;表现有较强的求知欲&#xff0c;积极观察、体验、思考&#xff0c;并能够灵活运用自己的知…

自养号测评是什么?亚马逊、沃尔玛、Target卖家如何建立自己的护城河?

近期有跨境卖家咨询我自养买家账号测评的事情&#xff0c;他们还是有不了解自养号测评的&#xff0c;所以珑哥觉得有必要再讲一下卖家测评的一些事情&#xff0c;之前文章也说过。这可能是跨境卖家运营的一个趋势。今天珑哥着重来介绍一下自养号测评 一、什么叫做自养号测评&a…

OrangePi AIpro初体验之图片视频检测案例真实测评

OrangePi AIpro简介 OrangePi AIpro官网 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两种版本。可以实现图像、视频等多种数据分析与推理…

简述v-for中的key的理解

在 Vue 中&#xff0c;v-for 是用来基于一个数组来渲染一个列表的指令。而 key 是一个特殊的属性&#xff0c;在 v-for 中经常被用到&#xff0c;它主要帮助 Vue 跟踪每个节点的身份&#xff0c;从而重用和重新排序现有元素。 key 的作用 性能优化&#xff1a;当 Vue 检测到列…

2024-python字典-报错compounds.iloc[0].molecule_structures.keys()

2024-python字典-报错compounds.iloc[0].molecule_structures.keys() .keys()拿不到 需要如何解决呢 import ast# 假设 "molecular_structures "是一个看起来像 Python 字典的字符串 molecule_structures df_VEGFR2_compounds.iloc[0].molecule_structures # 安全…

全球点赞最高的人颜廷利:真正的人生目标是什么

在那个充满生机的2024年春天&#xff0c;记者有幸对中国第一起名大师的老师颜廷利教授进行了深入的访谈。带着对其人生哲学的强烈好奇&#xff0c;记者紧张而期待地提出了问题&#xff1a;“颜教授&#xff0c;您在漫长的人生旅途中最追求的是什么&#xff1f;” 宁夏银川、山东…

PMP考试没有考过应该如何再考?

一、接受失败&#xff0c;理性分析 其实&#xff0c;PMP考试可以在PMI一年有效期内提交补考申请&#xff0c;若已经过了一年有效期&#xff0c;考生则需要重新进行完整的PMP考试报名流程。PMP考试补考费用&#xff1a;2500元/次。 1.接受失败&#xff1a;接受并处理情绪。面对…

【Python数据分析】基于自回归积分滑动平均模型的疫情分析报告 附完整python代码

资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 数据分析 数据来自法国疫情数据 资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 代码详解 完整代码文件 主要是对时间序列数据进行分析和预…

C++|四种方法解决三线程按顺序轮流打印ABC的问题:互斥锁和条件变量、原子操作、信号量

基于Pthreads线程库的实现 g your_program.cpp -lpthread编译时确保链接了Pthreads库. #include <pthread.h> #include <iostream> #include <unistd.h>// 全局变量&#xff0c;用于控制打印顺序 int turn 0; // 定义互斥锁和条件变量 pthread_mutex_t lo…

【#4 如何选择激活函数:深度学习中的关键决策】

文章目录 前言第一部分&#xff1a;激活函数的基础知识1.1 激活函数简介1.2 激活函数的作用 第二部分&#xff1a;选择激活函数的考虑因素2.1 网络层级2.2 任务类型2.3 训练稳定性2.4 计算效率2.5 网络深度 第三部分&#xff1a;流行激活函数的特点与应用场景3.1 Sigmoid3.2 Re…

技术面‍:前端代码是如何与服务器交互的

前言&#xff1a; 本篇文章主要是想讲解 .html 文件和 .CSS 文件在实际开发中和后端服务器交互最后上线的基础原理。 面向的人群&#x1f195;&#xff1a;是刚入行不久&#xff0c;且目前只会写前端业务代码而不清楚整个工作流的前端新人。我会从 0 开始一步一步带你理解整个…