大家好,欢迎来到IT知识分享网。
Nginx如何在线升级
Nginx根据安装方式不同,升级方式也不同,一般有三种:
-
yum方式安装,通过yum升级,不停机升级
-
编译方式安装,通过编译方式升级,不停机升级
-
容器方式安装,启动新容器方式升级,如果端口不变,需要停机,否则容器启动提示端口冲突
yum升级
1、首先查看通过yum安装的Nginx的版本,如图:
从上图可以看出,当前版本比较旧,现在我们需要升级到较新的版本,yum安装的nginx建议还是通过yum方式升级,否则可能出问题(当然,出了问题也可以重新装,不过麻烦而已)
2、添加新的Nginx源,并安装,如下:
wget https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
3、清除当前的yum缓存后,升级Nginx,命令如下:
yum clean all && yum makecache
yum update nginx #升级nginx
4、再次检查Nginx版本,已经升级到最新版本,如图:
通过编译方式升级
编译方式升级Nginx的前提是你当前的Nginx也是编译安装的(非编译安装通过编译升级我没试过,有兴趣的可自己尝试)
1、首先进入编译安装后的路径下查看当前版本,如图:
从上图看出,当前的Nginx版本为1.20.1,现在我们将其升级到1.24.0
2、将1.24.0版本压缩包上传到机器,解压缩,如下:
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzvf nginx-1.24.0.tar.gz -C /opt
rz -y nginx-1.24.0.tar.gz
tar xf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3、编译Nginx,注意,编译的时候需要将第一步中的相关模块加上,如下:
./configure --prefix=/usr/local/nginx
prefix指定的路径要与之前编译指定的路径一样
4、执行make命令,注意不要执行make install,如下:
make
5、备份原来的Nginx可执行文件,如下:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
6、替换新的二进制文件覆盖旧的,如下:
cp /root/nginx-1.24.0/objs/nginx /usr/local/nginx/sbin/
root@zabbix-agent sbin]# cp -f /opt/nginx-1.24.0/objs/nginx ./
cp: overwrite ‘./nginx’? y
[root@zabbix-agent sbin]#
注意:新的二进制文件是在源码包编译后的objs目录下
7、检查Nginx配置,可以看到配置正常,如图:
8、发送USR2信号给nginx master 进程,执行新的主进程和新的工作进程,依次启动新的主进程和新的工作进程,现在新,旧版本的nginx实例会同时运行,共同处理请求,如下:
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
从下面可以看出,NGINX的版本升级成功!!!!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++
再降回1.20版本:::::::::::
@@@@@@@@@@
总结:::
● Nginx 的信号控制
- TERM, INT 快速关闭
- QUIT 从容关闭
- HUP 平滑重启,重新加载配置文件
- USR1 重新打开日志文件,在切割日志时用途较大
- USR2 平滑升级可执行程序
- WINCH 从容关闭工作进程
● Nginx 的平滑升级
当需要将正在运行中的 nginx 升级、添加/删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的 nginx 可执行程序替换旧版本的课执行程序。步骤如下:
(1) 使用新的可执行程序替换旧的可执行程序,对于编译安装的 nginx,可以将新版本编译安装到旧版本的 nginx 安装路径中。替换之前,最好备份一下旧的可执行文件。
(2) 发送以下指令:
- [root@localhost ~]# kill -USR2 【旧颁布的Nginx主进程号】
(3) 旧版本 nginx 的主进程将重命名它的 pid 文件为 .oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的 nginx 可执行程序,依次启动新的主进程和新的工作进程。
(4) 此时,新、旧版本的 nginx 实例会同时运行,共同处理输入的请求。要逐步停止旧版本的 nginx 实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
- kill -WINCH 【旧版本的Nginx主进程号】
(5) 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。
(6) 这时候,我们可以决定是使用新版本,还是恢复到旧版本:
kill -HUP 【旧的主进程号】:nginx 将在不重载配置文件的情况下启动它的工作进程
kill -QUIT 【新的主进程号】:从容关闭其工作进程(worker process)
kill -TERM 【新的主进程号】:强制退出
kill 【新的主进程号或旧的主进程号】:如果因为某些原因新的工作进程不能退出,则向其发送 kill 信号
新的主进程退出后,旧的主进程会移除 .oldbin 后缀,恢复为它 的 .pid 文件,这样,一切就恢复到升级之前了。如果尝试升级成功,而你也希望保留新的服务器时,可发送 QUIT 信号给旧的主进程,使其退出而只留下新的服务器运行。
docker方式升级
docker方式升级比较简单,只要停止旧容器,然后新运行一个容器,并且保证新容器的挂载路径和旧的相同即可
1、首先查看当前容器运行的Nginx版本,执行命令如下:
docker inspect nginx
2、查看当前Nginx的挂载文件信息,如图:
3、停止当前Nginx,使用新镜像启动一个新的容器,如下:
docker stop nginx
docker run -itd --name new-nginx -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -p 80:80 nginx
4、再次查看容器中的Nginx镜像版本,已经升级成功,如图:
注意:新的容器运行一段时间后,如果没有问题,就可以将旧的容器删除
#nginx
10个
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30060.html