Nginx 平滑升级/回滚

news2025/2/27 8:17:01

平滑升级和回滚的前提条件是 nginx 已经安装好,源码安装 nginx 可参考上一篇文章。在上一篇文章的基础上,nginx 已安装好且已启动,目前是 1.24 版本。

 

一、平滑升级

Nginx 的平滑升级(热升级)是一种 不中断服务 即可更新 Nginx 版本的核心功能,其设计基于 多进程模型UNIX 信号机制

上面源码安装的是 1.24 版本的 Nginx,现在到官网下载 1.26 版本 Nginx 做平滑升级实验。

Nginx 官网:www.nginx.org

 

下载 1.26 版本的 Nginx。

wget https://nginx.org/download/nginx-1.26.3.tar.gz

下载实验会用到的 echo-nginx-module-0.63.tar.gz 模块,因为这个模块在 Nginx 1.26.0 时 echo 模块为了软件精简,把此模块踢除了,所以在这里需要单独下载。

echo-nginx-module-0.63.tar.gz 这个模块用于为 Nginx 服务器提供与 echo 相关的特定功能扩展。具体的功能可能包括但不限于以下几点:

  • 增强 Nginx 的输出能力,例如能够更灵活地定制响应的输出内容和格式。

  • 可能支持在 Nginx 配置中使用特定的 echo 指令来直接输出某些信息,而无需通过复杂的配置或后端处理。

  • 有助于在 Nginx 处理请求和响应的过程中,更方便地添加、修改或展示特定的文本信息。

echo 模块网址:Tags · openresty/echo-nginx-module · GitHub

 

下载并解压 echo-nginx-module-0.63.tar.gz 模块。

wget https://github.com/openresty/echo-nginx-module/archive/refs/tags/v0.63.tar.gz
tar xzf echo-nginx-module-0.63.tar.gz

解压后生成一个 echo-nginx-module-0.63 目录,编译 Nginx 时要读取这个目录。

解压 nginx-1.26.3。

tar xzf nginx-1.26.3.tar.gz

解压后生成 nginx-1.26.3 目录,进入此目录,检测环境,环境检测内容同上源码编译相同(需要哪个软件安装哪个软件就好)。 注意:此时需要添加 echo-nginx-module-0.63 模块。

./configure \           
--prefix=/usr/local/nginx \         # 安装目录
--user=nginx \                      # 指定nginx运行用户
--group=nginx \                     # 指定nginx运行组
--with-http_ssl_module \            # 支持https://
--with-http_v2_module \             # 支持http版本2
--with-http_realip_module \         # 支持ip透传
--with-http_stub_status_module \    # 支持状态页面 
--with-http_gzip_static_module \    # 支持压缩
--with-pcre \                       # 支持正则
--with-stream \                     # 支持tcp反向代理
--with-stream_ssl_module \          # 支持tcp的ssl加密
--add-module=/root/echo-nginx-module-0.63   #添加外部模块

make 编译(注意:此时不需要 make install),make 会生成 nginx 执行文件和相关信息。

make

把 /usr/local/nginx/sbin/ 目录下的 nginx 文件备份一份。注意:此时此目录下应只有一个 nginx 文件,如果有多的文件,则需要重新 make install 将编译生成的文件安装到指定位置,再备份。

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

把新版本的执行信息复制到 nginx 的执行目录里。\cp -f 强制覆盖文件,\cp 表示是用的真实的 cp 命令,而不是 alias 里的 cp -i 别名命令(这里的作用是直接覆盖文件,并且系统不提醒)。

\cp -f /root/nginx-1.26.3/objs/nginx /usr/local/nginx/sbin/

查看旧的 nginx 进程号,kill -USER2 重新加载配置文件、启用新的工作进程(只启动进程,不监听端口),以实现平滑升级而不导致服务中断。

ps aux | grep nginx
kill -USR2 35081        # 旧版本的nginx master进程号

此时有两套 nginx 进程,旧的和新的,回收旧的 worker 进程。

kill -WINCH 35081    # 旧版本的nginx master进程号

旧的进程 worker 删除了,master 还在,系统自动将所有的资源分配给了新的 worker。如果确定后续不需要回滚操作,就可以 kill -9 删除 master 进程。

测试:查看此时 nginx 提供服务的版本。

curl -I 192.168.67.100

这里可以看到,以前的版本是 1.24 版本,目前升级了是 1.26 版本。



测试:另一台客户端一直访问次 nginx 服务,证明我们在平滑升级的过程中,nginx 服务从未断过,升级的过程中客户感受不到一点异常。

while true
do
curl 192.168.67.100;sleep 1
done

 

二、回滚

为什么要回滚:在升级出现问题时,通过发送信号重新启用旧进程并停止新进程,恢复到升级前的状态。

修改 nginx 安装目录下的文件,备份新的 nginx 文件为 nginx.new,还原旧的 nginx 文件。

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.new
\cp -f nginx.old nginx

如果升级的版本发现问题需要回滚,可以重新拉起旧版本的 worker。

kill -HUP 35081    # 旧版本的ginx master进程号

此时激活了旧版本的 worker,再回收新版本的 worker。

kill -WINCH 35087    # 新版本的nginx master进程号

旧的进程 worker 删除了,master 还在,系统自动将所有的资源分配给了新的 worker。

测试:查看此时 nginx 提供服务的版本,版本已恢复旧版本。

curl -I 192.168.67.100

 可以看到此时 nginx 的版本已恢复之前的 1.24。 

kill -9 删除新的 nginx master 进程。

kill -9 35087    # 新版本的nginx master进程号

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

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

相关文章

强化学习演进:GRPO 从何而来

强化学习(Reinforcement Learning, RL)是机器学习的一个分支,其核心是让智能体(Agent)通过与环境(Environment)的交互,学习如何采取最优行动(Action)以最大化…

AOP进阶-02.通知顺序

一.通知顺序 当有多个切面类中的切入点表达式一样时,这些切面类的执行顺序是怎样的呢?如图我们将定义两个切面类,一个MyAspect2,一个MyAspect3,一个MyAspect4。执行后我们发现, 对于目标方法前的通知方法&…

深入探讨K8s资源管理和性能优化

#作者:曹付江 文章目录 前言:1.监控 Kubernetes 集群的资源利用率1.1 Prometheus1.2 Kubernetes 度量服务器1.3 Grafana1.4 自定义指标 2. 识别资源瓶颈2.1. 监控工具2.2. 性能剖析2.3 Kubernetes 事件和日志2.4. 群集自动扩展2.5. 负载测试…

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统,适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…

形式化数学编程在AI医疗中的探索路径分析

一、引言 1.1 研究背景与意义 在数字化时代,形式化数学编程和 AI 形式化医疗作为前沿领域,正逐渐改变着我们的生活和医疗模式。形式化数学编程是一种运用数学逻辑和严格的形式化语言来描述和验证程序的技术,它通过数学的精确性和逻辑性,确保程序的正确性和可靠性。在软件…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…

Blueprint —— Events

目录 一,Event Level Reset 二,Event Actor Begin Overlap 三,Event Actor End Overlap 四,Event Hit 五,Event Any Damage 六,Event Point Damage 七,Event Radial Damage 八&#xff…

Java一揽子集合整理

Java 集合框架 List ArrayList,底层Object数组,相关方法add,remove Vector,底层Object数组,线程安全,使用 synchronized 关键字进行同步处理 Stack,继承自Vector,是一个后进先出的…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

HybridCLR+Adressable+Springboot热更

本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易&#xff0c;动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目&#xff1a; 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…

金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测

随着“自主可控”在 IT 基础设施领域不断深化&#xff0c;数据库的国产化替代也被很多金融机构提上日程。为了保证性能&#xff0c;大部分国产数据库都基于信创架构的裸金属服务器部署。在国产虚拟化/超融合平台上&#xff0c;国产数据库性能表现如何&#xff1f;尤其是搭配信创…

【2025全网最新最全】前端Vue3框架的搭建及工程目录详解

文章目录 安装软件Node.js搭建Vue工程创建Vue工程精简Vue项目文件 Vue工程目录的解读网页标题的设置设置全局样式路由配置 安装软件Node.js 下载地址&#xff1a;https://nodejs.org/zh-cn/ 安装完成后&#xff0c;打开cmd,查看环境是否准备好 node -v npm -vnpm使用之前一定…

R 语言科研绘图第 27 期 --- 密度图-分组

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

QT各种版本下载安装

参考链接&#xff1a; 【Qt】超详细&#xff01;Qt4.8.6和VS2010的配置及使用 由于QT官网一般现在进不去&#xff0c;所以下载一些QT版本只能通过镜像或者以前下载存储的安装包来进行&#xff0c;现在推荐两种方法 从参考链接中搬过来&#xff1a; 方案一&#xff1a;国内镜…

信息系统的安全防护

文章目录 引言**1. 物理安全****2. 网络安全****3. 数据安全****4. 身份认证与访问控制****5. 应用安全****6. 日志与监控****7. 人员与管理制度****8. 其他安全措施****9. 安全防护框架**引言 从技术、管理和人员三个方面综合考虑,构建多层次、多维度的安全防护体系。 信息…

如何解决svn st中出现!(冲突)的问题

在 SVN&#xff08;Subversion&#xff09;中&#xff0c;svn status 命令用于查看工作副本的状态。当你看到 ! 符号时&#xff0c;通常表示文件或目录在工作副本中丢失&#xff08;missing&#xff09;。以下是解决这个问题的步骤&#xff1a; 1. 理解 ! 的含义 ! 表示该文件…

Redis|复制 REPLICA

文章目录 是什么能干嘛怎么玩案例演示复制原理和工作流程复制的缺点 是什么 官网地址&#xff1a;https://redis.io/docs/management/replication/Redis 复制机制用于将数据从一个主节点&#xff08;Master&#xff09;复制到一个或多个从节点&#xff08;Slave&#xff09;&a…

水利 2月26日练习

测量前准备 使用数字万用表的蜂鸣器档&#xff0c;可以高速检验电解电容器的质量好坏。测量方法如图5-14所示。将数字万用表拨至蜂鸣器档&#xff0c;用两支表笔区分与被测电容器Cx的两个引脚接触&#xff0c;应能听到一阵急促的蜂鸣声&#xff0c;随即声响中止&#xff0c;同时…

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 反序列化

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;PHP 序列化 — Serialize 序列化就是将对象的状态信息转化为可以存储或传输的形式的过程&#xff0c;在 PHP 中&#xff0c;通常使用 serialize() 函数来完成序列化的操作…

汽车免拆诊断案例 | 保时捷车发动机偶发熄火故障 2 例

案例1 2008款保时捷卡宴车行驶中发动机偶发熄火 故障现象  一辆2008款保时捷卡宴车&#xff0c;搭载4.8 L 自然吸气发动机&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车行驶中发动机偶发熄火&#xff1b;重新起动&#xff0c;发动机能够起动着机&#xff…