快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,小编会及时修改)
Nginx热部署
首先来讲一下为什么要进行热部署
nginx 支持热加载 热部署 ,在不打断用户请求的情况下就可以更新版本
Nginx热部署的原因主要有以下几点:
- 当旧的nginx功能模块不足以支撑项目使用时,需要加载新的nginx到项目中
- 避免 downtime:传统的软件升级需要停止服务,进行升级后再重新启动服务,这个过程会造成服务停机,如果在高流量情况下停机,会影响用户体验和业务收益。
- 提升服务可用性和稳定性:Nginx热部署可以在不中断服务的情况下进行升级,可以有效减少服务宕机时间,提高业务的可用性和稳定性。
- 降低升级风险:热部署可以快速回滚到旧版本,降低升级风险。在升级过程中,如果出现了问题,可以很快地切回到旧版本,避免影响业务。
- 提高运维效率:热部署可以自动完成升级操作,减少人工干预,提高运维效率。同时,热部署也可以实现自动化部署和回滚。
Nginx热部署操作步骤
本次测试将2.3.1版本的Nginx更新为2.4.1版本
- 在旧nginx开启状态下,修改旧nginx的sbin下的命令名
[root@localhost sbin]# mv nginx nginx.old
- 重新编译不安装一个新的nginx,位置与旧的一致
(安装nginx详情可查看Centos7安装配置nginx)
[root@localhost tengine-2.4.1]# ./configure --prefix=/tmp/tngx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio
[root@localhost tengine-2.4.1]# make
- 将tengine-2.4.1包下的objs/nginx复制到旧nginx包下
cp tengine-2.4.1/objs/nginx /tmp/tngx/sbin/
- 发送USR2信号给nginx的master
查看master的进程
[root@localhost sbin]# ps -ef | grep 'nginx'
发送USR2信号
[root@localhost sbin]# kill -USR2 8930
再次查看
[root@localhost sbin]# ps -ef | grep ngi
此时热部署已经完成
- 给旧的master发送WINCH信号,使其原本工作进程退出
[root@localhost sbin]# kill -WINCH 8930
- 关闭旧的master进程
[root@localhost sbin]# kill -9 8930
补充一下:可能有的小伙伴看到这里会疑惑,我现在相当于有两个命令一个是nginx(新版本)和一个nginx.old(老版本),而此时正在运行的nginx进程就可以使用nginx(新版本) 进行关闭,然后再进行使用,间接地完成了版本的更新(老版本的nginx.old可以删除也可以保留)