美文网首页
Linux_248_Nginx热部署

Linux_248_Nginx热部署

作者: 为宇绸缪 | 来源:发表于2022-09-14 19:35 被阅读0次

nginx作为一个优秀的web服务器,优秀的反向代理服务器,并且nginx也支持高可用的特性,nginx还支持热部署的特点
热部署的特点:在不重启或者关闭进程的情况下,新的应用直接替换旧的应用

更好nginx的二进制命令版本
热部署大致流程
1、备份旧的程序 二进制文件 备份nginx命令 /opt/tngx232/sbin/nginx
2、编译安装新的二进制文件,覆盖旧的二进制文件(再装一个版本的nginx,且替换旧的nginx命令)
3、发送USR2信号给旧的master进程
4、发送WINCH信号给旧的master进程
5、发送QUIT信号给旧的master进程

环境准备工作

1、准备旧的nginx程序版本
[root@yuweijie conf]# nginx -v
Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0

2、准备一个新的nginx程序版本
wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz

nginx热部署操作
nginx工作模式是master-worker(包工头--干活工人)
刚才所说的nginx支持reload重载,仅仅是nginx的master进程,在检查配置文件正确之后,正确则更新,错误则返回异常,正确的情况下也不会更改已经建立的worker,只会等待worker处理完毕请求之后,杀死旧的worker,然后再从新的配置文件中,运行出新的worker(一旦更换了配置文件,reload master主进程,那么手底下的工人也就会被换一批)
nginx还提供了热部署的功能,特点是:在不影响用户体验下,进行软件版本升级,也就是不主动的杀死worker,就能够更好软件的二进制命令

1、检查当前机器环境的nginx版本
[root@yuweijie conf]# nginx -v
Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0

2、备份旧的二进制命令
/opt/tngx232/sbin 进入该目录,对nginx进行备份
mv nginx nginx.232

3、检查旧的二进制命令的编译参数
[root@yuweijie sbin]# nginx.232 -V
Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/opt/tngx232 --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio

4、下载编译安装新版本的nginx
wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz
tar -zxvf tengine-2.2.0.tar.gz
进行编译安装
cd tengine-2.2.0
新版本的nginx编译参数和旧的保持一致
./configure --prefix=/opt/tngx232 --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio
编译三部曲,后两步
make && make install

5、检查一下新版的nginx信息,发现此时已经有2个版本的nginx命令
进入/opt/tngx232/sbin
[root@yuweijie sbin]# ./nginx -v
Tengine version: Tengine/2.2.0 (nginx/1.8.1)
[root@yuweijie sbin]# ./nginx.232 -v
Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0

6、再次检查当前系统的nginx状态
通过pid ppid可以验证,worker process 是由 master process 创建的
[root@yuweijie sbin]# ps -ef | grep nginx
root       8975      1  0 05:41 ?        00:00:00 nginx: master process /opt/tngx232/sbin/nginx
root       8976   8975  0 05:41 ?        00:00:00 nginx: worker process
root       8977   8975  0 05:41 ?        00:00:00 nginx: worker process
root      11841   1981  0 05:44 pts/0    00:00:00 grep --color=auto nginx

worker process的父进程号和master process的进程号一致

7、此时发生一个USR2信号给旧的master process,作用是使得nginx旧的版本停止接收用户请求,并且切换为新的nginx版本
cat /opt/tngx232/logs/nginx.pid 
执行如下命令,给旧的nginx发送信号
kill -USR2 `cat /opt/tngx232/logs/nginx.pid`
当执行完毕上述的命令之后,旧的nginx-master首先会重命名它的pid文件,然后添加上.oldbin后缀,然后会再启动一个新的master主进程,以及worker进程,使用的是新版本的nginx二进制命令,此时新的nginx就能够自动的接收用户发来的请求,过渡到新的nginx-worker工作进程上,因此实现了一个平滑过渡

8、此时再次检查新的nginx进程状态
[root@yuweijie sbin]# ps -ef | grep nginx
root       8975      1  0 05:41 ?        00:00:00 nginx: master process /opt/tngx232/sbin/nginx
root       8976   8975  0 05:41 ?        00:00:00 nginx: worker process
root       8977   8975  0 05:41 ?        00:00:00 nginx: worker process
root      11844   8975  0 05:45 ?        00:00:00 nginx: master process /opt/tngx232/sbin/nginx
root      11845  11844  0 05:45 ?        00:00:00 nginx: worker process
root      11846  11844  0 05:45 ?        00:00:00 nginx: worker process
root      11848   1981  0 05:45 pts/0    00:00:00 grep --color=auto nginx


9、此时发送WINCH信号,给旧的master进程,让旧的master进程优雅的退出
kill -WINCH `cat /opt/tngx232/logs/nginx.pid.oldbin`
[root@yuweijie sbin]# ps -ef | grep nginx
root       8975      1  0 05:41 ?        00:00:00 nginx: master process /opt/tngx232/sbin/nginx
root      11844   8975  0 05:45 ?        00:00:00 nginx: master process /opt/tngx232/sbin/nginx
root      11845  11844  0 05:45 ?        00:00:00 nginx: worker process
root      11846  11844  0 05:45 ?        00:00:00 nginx: worker process
root      11851   1981  0 05:46 pts/0    00:00:00 grep --color=auto nginx


10、此时如果你觉得nginx服务一切正常,就可以干掉旧的master主进程
kill 8975

相关文章

  • Linux_248_Nginx热部署

    nginx作为一个优秀的web服务器,优秀的反向代理服务器,并且nginx也支持高可用的特性,nginx还支持热部...

  • Spring Boot初探

    开启热部署 加Maven依赖 开启热部署

  • Spring Boot 热部署

    什么是热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 实现热部署方法 Spr...

  • 初学springboot热部署出现的问题之spring-boot

    初入springboot使用热部署 spring-boot-loader 当前的热部署只使用与方法修改的热部署

  • Spring boot 采用devtools实现热部署

    Spring boot 采用devtools实现热部署 什么是热部署? 热部署,就是在应用正在运行的时候升级软件,...

  • 2019-04-01

    Spring Boot 采用devtools实现热部署:什么是热部署? 热部署,就是在应用正在运行的时候升级软件,...

  • springboot热部署(自动编译项目)

    使用IDEA进行热部署 一共有三种热部署的方式。分别是,《通过配置Tomact实现热部署》,《SpringBoot...

  • Tomcat之热部署和热加载源码分析

    热部署和热加载类似,都是在不重启Tomcat情况下,使最新代码生效。 热部署与热加载的区别: 热部署表示重新部署应...

  • 热部署

    什么是热部署? 热部署就是当应用正在运行时,升级软件就不需要重启应用。就比如我们修改了代码的某一部分,不需要再...

  • 热部署

    对于Java应用程序来说,热部署就是在运行时更新Java类文件。 热部署的原理是什么? 想要知道热部署的原理,必须...

网友评论

      本文标题:Linux_248_Nginx热部署

      本文链接:https://www.haomeiwen.com/subject/wcslortx.html