本文主要是介绍nginx平滑升级与回滚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
华子目录
- 升级
- 实验环境准备
- 测试内容准备
- 实验要求
- 实验步骤
- 1.解压包
- 2.检测1.26版本的环境
- 3.make编译
- 4.备份之前的`nginx`启动脚本
- 5.将1.26中的nginx启动脚本覆盖掉1.24中的
- 6.`kill -USR2 旧主进程pid`
- 7.`kill -WINCH 旧主进程pid`
- 实验测试
- 回滚
- 1.`kill -HUP 旧主进程pid`
- 2.`kill -WINCH 新主进程pid`
- 3.备份`nginx`启动脚本
- 4.`nginx.old`覆盖`nginx`
- 5.`kill -9 新主进程pid`
- 回滚测试
升级
实验环境准备
- 原
nginx
版本:1.24
- 需要
升级到
的版本:1.26
- 需要的包:
echo-nginx-module-0.63.tar.gz
,nginx-1.24.0.tar.gz
,nginx-1.26.2.tar.gz
[root@nginx ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg nginx-1.24.0 nginx-1.26.2.tar.gz
模板 图片 下载 桌面 echo-nginx-module-0.63.tar.gz nginx-1.24.0.tar.gz vmset-rhel9-mountYum.sh
测试内容准备
[root@nginx ~]# cd /usr/local/nginx/html
[root@nginx html]# echo hello world > index.html[root@nginx html]# cat index.html
hello world
while true; do curl 172.25.254.100;sleep 1; done
实验要求
在升级的过程中,原nginx提供的web服务不能中断
[root@nginx ~]# ps -ef | grep nginx
root 42795 1 0 09:31 ? 00:00:00 nginx: master process nginx
nginx 42796 42795 0 09:31 ? 00:00:00 nginx: worker process
root 42798 39792 0 09:31 pts/0 00:00:00 grep --color=auto nginx
[root@nginx ~]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.24.0 #可以看到旧版本是1.24的
Date: Sat, 31 Aug 2024 13:32:21 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 31 Aug 2024 13:31:18 GMT
Connection: keep-alive
ETag: "66d31b26-267"
Accept-Ranges: bytes
实验步骤
1.解压包
[root@nginx ~]# tar -zxvf echo-nginx-module-0.63.tar.gz
[root@nginx ~]# tar -zxvf nginx-1.26.2.tar.gz
2.检测1.26版本的环境
[root@nginx ~]# cd nginx-1.26.2/
[root@nginx nginx-1.26.2]# ./configure --prefix=/usr/local/nginx \ #--prefix表示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 #指定添加的模块路径(这个模块的作用:在nginx内部可以执行echo命令)
3.make编译
- 先
make
编译,不要make install
[root@nginx nginx-1.26.2]# make
4.备份之前的nginx
启动脚本
[root@nginx ~]# cd /usr/local/nginx/sbin/
[root@nginx sbin]# ls
nginx
[root@nginx sbin]# cp nginx nginx.old
[root@nginx sbin]# ls
nginx nginx.old
5.将1.26中的nginx启动脚本覆盖掉1.24中的
#-f表示强制覆盖
[root@nginx sbin]# \cp -f /root/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/
6.kill -USR2 旧主进程pid
- 使用
kill -USR2
启动一个新的
,只启动,不监听端口
[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 928 ? Ss 10:56 0:00 nginx: master process nginx
nginx 52798 0.0 0.1 13720 5348 ? S 10:56 0:00 nginx: worker process
root 52800 0.0 0.0 221680 2252 pts/0 S+ 10:57 0:00 grep --color=auto nginx[root@nginx sbin]# pidof nginx
52798 52797[root@nginx sbin]# kill -USR2 52797 #指定master的pid[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
nginx 52798 0.0 0.1 13720 5348 ? S 10:56 0:00 nginx: worker process
root 52823 0.0 0.1 9864 5912 ? S 10:58 0:00 nginx: master process nginx
nginx 52824 0.0 0.1 13752 5308 ? S 10:58 0:00 nginx: worker process
root 52826 0.0 0.0 221680 2324 pts/0 S+ 10:58 0:00 grep --color=auto nginx
- 此时访问还在继续
7.kill -WINCH 旧主进程pid
- 使用
kill -WINCH
把旧的主进程
回收掉
[root@nginx sbin]# kill -WINCH 52797[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
root 52823 0.0 0.1 9864 5912 ? S 10:58 0:00 nginx: master process nginx
nginx 52824 0.0 0.1 13752 5308 ? S 10:58 0:00 nginx: worker process
root 52842 0.0 0.0 221680 2316 pts/0 S+ 11:03 0:00 grep --color=auto nginx
- 此时访问还在继续
实验测试
[root@nginx sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.26.2 #可以看到版本升级成功
Date: Sat, 31 Aug 2024 15:04:16 GMT
Content-Type: text/html
Content-Length: 12
Last-Modified: Sat, 31 Aug 2024 14:43:41 GMT
Connection: keep-alive
ETag: "66d32c1d-c"
Accept-Ranges: bytes
- 发现
web服务
也没有中断过
回滚
1.kill -HUP 旧主进程pid
[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
root 52823 0.0 0.1 9864 5912 ? S 10:58 0:00 nginx: master process nginx
nginx 52824 0.0 0.1 13752 5308 ? S 10:58 0:00 nginx: worker process
root 52848 0.0 0.0 221680 2344 pts/0 S+ 11:06 0:00 grep --color=auto nginx[root@nginx sbin]# kill -HUP 52797[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
root 52823 0.0 0.1 9864 5912 ? S 10:58 0:00 nginx: master process nginx
nginx 52824 0.0 0.1 13752 5308 ? S 10:58 0:00 nginx: worker process
nginx 52849 0.0 0.1 13720 5348 ? S 11:08 0:00 nginx: worker process
root 52851 0.0 0.0 221680 2356 pts/0 S+ 11:08 0:00 grep --color=auto nginx
2.kill -WINCH 新主进程pid
- 把
新的主进程
回收了
[root@nginx sbin]# kill -WINCH 52823[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
root 52823 0.0 0.1 9864 6416 ? S 10:58 0:00 nginx: master process nginx
nginx 52849 0.0 0.1 13720 5348 ? S 11:08 0:00 nginx: worker process
root 52858 0.0 0.0 221680 2352 pts/0 S+ 11:10 0:00 grep --color=auto nginx
3.备份nginx
启动脚本
[root@nginx sbin]# ls
nginx nginx.old
[root@nginx sbin]# cp nginx nginx.new
[root@nginx sbin]# ls
nginx nginx.new nginx.old
4.nginx.old
覆盖nginx
[root@nginx sbin]# \cp -f nginx.old nginx
[root@nginx sbin]# ls
nginx nginx.new nginx.old
5.kill -9 新主进程pid
[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
root 52823 0.0 0.1 9864 6416 ? S 10:58 0:00 nginx: master process nginx
nginx 52849 0.0 0.1 13720 5348 ? S 11:08 0:00 nginx: worker process
root 52880 0.0 0.0 221680 2240 pts/0 S+ 11:15 0:00 grep --color=auto nginx[root@nginx sbin]# kill -9 52823[root@nginx sbin]# ps -aux | grep nginx
root 52797 0.0 0.0 9832 2396 ? Ss 10:56 0:00 nginx: master process nginx
nginx 52849 0.0 0.1 13720 5348 ? S 11:08 0:00 nginx: worker process
root 52883 0.0 0.0 221680 2352 pts/0 S+ 11:15 0:00 grep --color=auto nginx
回滚测试
[root@nginx sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.24.0 #发现已经回滚到旧版本
Date: Sat, 31 Aug 2024 15:12:01 GMT
Content-Type: text/html
Content-Length: 12
Last-Modified: Sat, 31 Aug 2024 14:43:41 GMT
Connection: keep-alive
ETag: "66d32c1d-c"
Accept-Ranges: bytes
- 发现
web服务
也没有中断过
这篇关于nginx平滑升级与回滚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!