Nginx在线服务状态下平滑升级或新增模块
nginx在使用过程中,有时需要在不影响当前业务的情况下,进行升级或新增模块。nginx的升级有两种方法:1.半自动化升级;2.手动升级
不过都需要先查看安装的nginx版本和配置信息,然后前往官网下载所需的版本,并上传
1 2 3 4 5 | [root@youxi1 ~]# nginx -V nginx version: nginx/1.14.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx -- group =nginx |
下载地址:http://nginx.org/en/download.html
一、半自动化升级
半自动化升级,其实就是在最后迁移的时候不使用make install,而使用源码自带的升级命令make upgrade来自动完成。
(1).解压文件,并编译(只编译不安装)
只编译不安装。./configure后面的参数可以保持一致,也可以改动;另外我这里指定了--with-pcre,需要保证后面的参数存在。
1 2 3 4 5 6 | [root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/ [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/ [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx -- group =nginx [root@youxi1 nginx-1.16.0]# make -j 4 //这里指定的是CPU内核数量,加快编译速度 [root@youxi1 nginx-1.16.0]# echo $? 0 |
(2).备份旧的二进制文件,复制新的二进制文件到nginx目录
1 2 | [root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old} //备份 [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/ //复制 |
(3).执行升级语句
1 2 3 4 5 6 7 8 | [root@youxi1 nginx-1.16.0]# make upgrade /usr/local/nginx/sbin/nginx -t //查看配置文件是否正确,这里使用的是刚复制过来的nginx二进制文件 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` //发送平滑迁移信号给旧的nginx进程 sleep 1 //等待1秒 test -f /usr/local/nginx/logs/nginx.pid.oldbin //检测旧的nginx.pid进程是否变为nginx.pid.oldbin kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` //结束工作进程,完成此次升级 |
test -f [文件]如果为一个普通文件,则为真。这里用来判断文件是否存在。
手动升级其实就是使用打印出来的这些语句,加上kill –WINCH `cat /usr/local/nginx/log/nginx.pid.oldbin`(从容关闭nginx.pid.oldbin)和kill –HUP `cat /url/local/nginx/log/nginx.pid.oldbin`(不重启旧的nginx进程)。
(4).检测是否升级成功
首先看看是否正在运行
1 2 3 4 5 6 | [root@youxi1 nginx-1.16.0]# ps aux | grep nginx //查看是否正常运行,如果之前就能使用systemctl,也可以使用systemctl查看 nginx 1338 0.0 0.1 216972 6244 ? S 13:08 0:00 php-fpm: pool www nginx 1340 0.0 0.1 216972 6244 ? S 13:08 0:00 php-fpm: pool www root 7556 0.0 0.0 18252 1728 ? S 17:05 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 7557 0.0 0.0 18624 1360 ? S 17:05 0:00 nginx: worker process root 7563 0.0 0.0 112724 988 pts/0 S+ 17:06 0:00 grep --color=auto nginx |
接着看看配置文件是否有错,还有nginx的版本和配置选项信息。我能直接使用nginx是因为配置了环境变量。
1 2 3 4 5 6 7 | [root@youxi1 nginx-1.16.0]# nginx -t //查看配置文件是否有错 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@youxi1 nginx-1.16.0]# nginx -V //查看版本和配置选项信息 nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx -- group =nginx |
最后使用Windows查看
二、手动升级
手动升级和半自动化升级大同小异,只是在执行升级语句时,手动输入打印的命令
(1).解压文件并编译
只编译不安装。./configure后面的参数可以保持一致,也可以改动;另外我这里指定了--with-pcre,需要保证后面的参数存在。
1 2 3 4 5 6 | [root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/ [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/ [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx -- group =nginx [root@youxi1 nginx-1.16.0]# make -j 4 //这里指定的是CPU内核数量,加快编译速度 [root@youxi1 nginx-1.16.0]# echo $? 0 |
(2).备份旧的二进制文件,复制新的二进制文件到nginx目录
1 2 3 4 5 6 | [root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old} //备份 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/ nginx.old [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/ //复制 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/ nginx nginx.old |
(3).执行取代make upgrade的命令
注意:这里的nginx.pid(nginx进程文件)所在地址不是固定的,需要查看nginx目录下的conf/nginx.conf配置文件
1 2 3 4 5 6 7 8 9 10 11 12 | [root@youxi1 nginx-1.16.0]# /usr/local/nginx/sbin/nginx -t //查看配置文件是否正确,这里使用的是刚复制过来的nginx二进制文件 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@youxi1 nginx-1.16.0]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` //发送平滑迁移信号给旧的nginx [root@youxi1 nginx-1.16.0]# test -f /usr/local/nginx/logs/nginx.pid.oldbin //我们判断是否平滑迁移到nginx.pid.oldbin,test -f与echo $?的组合 [root@youxi1 nginx-1.16.0]# echo $? 0 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/logs/nginx.pid* //判断是否平滑迁移也可以ls命令查看是否存在nginx.pid.oldbin文件 /usr/local/nginx/logs/nginx.pid /usr/local/nginx/logs/nginx.pid.oldbin [root@youxi1 nginx-1.16.0]# kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` //从容关闭nginx进程 [root@youxi1 nginx-1.16.0]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` //不重启旧的nginx进程 [root@youxi1 nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` //结束工作进程,完成此次升级 |
test -f [文件]和echo $?组合判断平滑迁移,与直接ls [文件]判断平滑迁移只要使用一个就可以了。
(4).检测是否升级成功
首先看看是否正在运行
1 2 3 4 5 6 7 | [root@youxi1 nginx-1.16.0]# ps aux | grep nginx nginx 1307 0.0 0.1 216972 6244 ? S 10:34 0:00 php-fpm: pool www nginx 1308 0.0 0.1 216972 6244 ? S 10:34 0:00 php-fpm: pool www root 7476 0.0 0.0 18252 1728 ? S 10:45 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 7477 0.0 0.0 18624 1360 ? S 10:45 0:00 nginx: worker process nginx 7493 0.0 0.0 18600 1344 ? S 10:47 0:00 nginx: worker process root 7571 0.0 0.0 112724 988 pts/0 S+ 11:08 0:00 grep --color=auto nginx |
接着看看配置文件是否有错,还有nginx的版本和配置选项信息。我能直接使用nginx是因为配置了环境变量。
1 2 3 4 5 | [root@youxi1 nginx-1.16.0]# nginx -V nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx -- group =nginx |
最后使用Windows查看
参考:https://blog.csdn.net/xiaolong20081/article/details/82871878
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
2018-06-29 Linux命令之cat
2018-06-29 Linux命令之diff