Nginx平滑升级

有时候我们需要对Nginx版本进行升级以满足运维人员对其功能的需求,例如添加xxx模块,需要xxx功能,而此时Nginx又在跑着业务无法停掉,这时我们就只能平滑升级了。


原理

Nginx服务接收到USR2信号后,将Nginx.pid文件添加.oldbin变成nginx.pid.oldbin文件;然后执行新版本Nginx服务器的二进制文件启动服务,如果新的服务启动成功,系统中将有新旧两个Nginx主进程共同提供Web服务,之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除Nginx.pid.oldbin文件。


一、Nginx信号简介

1.主进程支持的信号
2.TERM, INT: 立刻退出
3.QUIT: 等待工作进程结束后再退出
4.KILL: 强制终止进程
5.HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
6.USR1: 重新打开日志文件
7.USR2: 启动新的主进程,实现热升级
8.WINCH: 逐步关闭工作进程
9.工作进程支持的信号
10.TERM, INT: 立刻退出
11.QUIT: 等待请求处理结束后再退出
12.USR1: 重新打开日志文件

二、说明

  • 本手册升级示例以Nginx-1.8.0版本升级到Nginx-1.20.1版本为例;

二、升级方案

1.升级前准备

下载最新nginx版本,下载安装包,微信关注《小白看Java》回复0004获取提取码

2.配置记录

查看当前服务器的nginx版本,记录配置信息,命令如下:

cd /usr/local/nginx/sbin/
./nginx -V

在这里插入图片描述
配置命令为: --prefix=/usr/local/nginx --add-module=/data/software/fdfs/fastdfs-nginx-module/src

2.编译Nginx软件

解压Nginx新版本安装包:

	tar -zxvf nginx-1.20.1.tar.gz 
	cd /nginx/nginx-1.20.1
	将上面记录的配置信息加上,编译
	./configure --prefix=/usr/local/nginx --add-module=/data/software/fdfs/fastdfs-nginx-module/src
	make

在这里插入图片描述
注意:make完毕后不要运行make install

2.重命名Nginx执行文件

目录换成自己的安装目录
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

3.覆盖Nginx执行文件

cp /data/software/nginx/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/nginx
验证有效性
cd /usr/local/nginx/sbin/nginx
./nginx -t

在这里插入图片描述

4.Nginx平滑升级

  1. 查看nginx之前的主进程pid
cd /usr/local/nginx/logs
cat nginx.pid

在这里插入图片描述

  1. 使用USR2信号量进行平滑升级,会产生一个.oldbin的文件
 kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

在这里插入图片描述
此时再查看pid ,cat nginx.pid
在这里插入图片描述
3. 关闭旧进程
kill -QUIT cat /usr/local/nginx/logs/nginx.pid.oldbin

5.验证

cd /usr/local/nginx/sbin
./nginx -V

在这里插入图片描述


总结点赞?

谢谢大哥们关注


版权声明:本文为qq_41337192原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。