美文网首页
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热部署

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