nginx的平滑升级(热部署),回退

1.nginx的平滑升级(热部署),版本回退

所谓的热升级也叫做热部署,或者平滑升级,也就是说,在不停止nginx服务的情况下,完成nginx的升级工作。但是这里有一个注意点,就是使用这种方法有一个前提,前提就是你在启动nginx时使用的是nginx二进制文件的绝对路径,而不是直接在命令行中输入"nginx"的方式启动的nginx服务,不通过绝对路径启动的方式通常是为了方便,配置了nginx相关的环境变量,如果没有通过绝对路径启动nginx,那么当你向nginx进程发送更新的信号时,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、付费专栏及课程。

余额充值