实现nginx的平滑升级以及版本回退,服务不中止(*热部署)

一、nginx平滑升级的介绍

nginx的升级,也称为热部署,平滑升级。即不停止nginx服务的情况下,完成nginx的升级工作。
前提:在启动nginx时使用的是nginx二进制文件的绝对路径,而不是直接在命令行中输入"nginx"的方式启动的nginx服务。不通过绝对路径启动的方式通常是为了方便,配置了nginx相关的环境变量,如果没有通过绝对路径启动nginx,那么当你向nginx进程发送更新的信号时,nginx进程可能会无法找到新的二进制程序(由于没有找新版本的二进制程序,所以没有任何反应)

二、实验

【1】nginx的平滑升级:

下载nginx新版本软件,正常执行./configure 和make 但不要执行make install
[root@server2 nginx-1.19.2]# cd objs/     
[root@server2 objs]# cp nginx /usr/local/nginx/sbin/ -f
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? yes
[root@server2 objs]# ps aux | grep nginx 
root       7651  0.0  0.1  45864  1088 ?        Ss   21:53   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     7655  0.0  2.8  74572 28148 ?        S    21:53   0:00 nginx: worker process
root      13254  0.0  0.0 112712   976 pts/0    R+   22:34   0:00 grep --color=auto nginx
[root@server2 objs]# ./nginx -v
nginx version: nginx/1.19.2
[root@server2 objs]# ps ax | grep nginx   #获取当前nginx主进程pid:
  7651 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
  7655 ?        S      0:00 nginx: worker process
 13326 pts/0    S+     0:00 grep --color=auto nginx
[root@server2 objs]# kill -USR2 7651     #对nginx的master进程(正在运行的老版本的master进 
                                         程)发送USR2信号,老版本的master进程收到信号后,会通 
                                         过新版本的二进制文件启动新版本的master进程,新版本的 
                                         master进程会启动新版本的worker进程,此时新老版本的 
                                         nginx进程同时存在。   
[root@server2 objs]# ps ax | grep nginx 
  7651 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
  7655 ?        S      0:00 nginx: worker process
 13362 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 13368 ?        S      0:00 nginx: worker process
 13370 pts/0    R+     0:00 grep --color=auto nginx
[root@server2 objs]# kill -WINCH 7651   #向老版本的master进程发送WINCH信号,以便先优雅的停止 
                                        老版本的worker进程,新的请求会被新版本的worker进程处 
                                        理,此时老的master进程仍然存在,留下老的master进程是 
                                        为了以防万一,以便随时回滚,此时老版本的master进程、 
                                        新版本的master进程和新版本的worker进程同时存在,升级 
                                        过程暂且完毕。
[root@server2 objs]# ps ax | grep nginx 
  7651 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
 13362 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 13368 ?        S      0:00 nginx: worker process
 13412 pts/0    R+     0:00 grep --color=auto nginx
[root@server2 objs]# ./nginx -v
nginx version: nginx/1.19.2

【2】版本回退
如果升级后万一出现问题,则可以随时进行回滚,由于老版本的master进程并未停止,所以我们可以向老的master进程发送HUP信号,即可通过老版本的master进程重新生成老版本的worker进程,当老版本的worker进程重新被拉起后,即可向新版本的master进程发送USR2信号,使新版本的master进程解散其worker进程,之后再向新版本的master进程发送WINCH信号使旧版本的master进程接替新版本的master进程的工作,此时已经成功回退到旧版本。

    [root@server2 objs]# cd /usr/local/nginx/sbin
    [root@server2 sbin]# ls
    nginx  nginx.old
    [root@server2 sbin]# cp -f nginx.old nginx
    cp: overwrite ‘nginx’? yes
    [root@server2 sbin]# ps ax | grep nginx
      7651 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
     13362 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
     13368 ?        S      0:00 nginx: worker process
     13830 pts/0    R+     0:00 grep --color=auto nginx
    [root@server2 sbin]# kill -HUP 7651
    [root@server2 sbin]# kill -WINCH 13362
    [root@server2 sbin]# kill -QUIT  13362
    [root@server2 sbin]# ps ax | grep nginx
      7651 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
     13854 ?        S      0:00 nginx: worker process
     13885 pts/0    R+     0:00 grep --color=auto nginx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值