关于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,一经查实,立即删除!

相关文章

高通 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帮我…

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

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

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

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

MySQL -- 相关知识点

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

大规模敏捷SA(Leading SAFe)证书是什么意思?如何报名,含金量高吗?

大规模敏捷SA(Leading SAFe)证书是什么意思? 常规的敏捷框架适用于中小型项目团队,而且不具有扩展性。基于常规的敏捷框架,SAFe定义了一个可扩展的敏捷框架模型,它适用于大型团队的合作开发,可以提高团队之间的协作性…

【再探】设计模式—职责链模式、命令模式及迭代器模式

行为型设计模式研究系统在运行时对象之间的交互,进一步明确对象的职责。有职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式及访问模式共11种。 1 职责链模式 需求:1) 请求能被多…

如何使用golang自带工具对代码进行覆盖率测试

在 Go 语言中,测试代码覆盖率通常使用 go test 命令结合 -cover 和 -coverprofile 1. 基本代码覆盖率报告 在项目目录下运行以下命令 go test -cover这将在控制台输出一个代码覆盖率的百分比。但是,这种方式不会保存覆盖率数据(可以指定目…

反对加征关税,特斯拉上海厂传减产20% | 百能云芯

特斯拉公司首席执行官马斯克近日在公开场合表达了对美国计划对中国电动车加征关税的反对立场,强调特斯拉不支持任何扭曲市场的举措。据知情人士透露,特斯拉上海工厂正计划在今年第二季度至少削减Model Y车型的产量20%,以应对市场需求的变化。…

C#读取.sql文件并执行文件中的sql脚本

有些时候我们需要在程序中编写读取sql脚本文件并执行这些sql语句,但是我们在有些时候会遇到读出来的sql语句不能执行,其实不能执行并不是你的sql脚本文件有错误,而是去执行sql语句的时候,C#代码里面执行sql语句的代码对sql里面的一…

低代码与人工智能:改变软件开发的未来

引言 在当今快速发展的科技时代,软件开发行业也在不断地创新和演进。其中,低代码开发和人工智能技术是两个备受关注的领域,低代码开发通过简化开发流程和降低编码难度,使得软件开发变得更加高效和便捷,而人工智能技术…

正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章

在数字化强国的主旋律之下,政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下,正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验,成为了政府信息化建设的杰出代表。甘肃省人大代表履职…