nginx-系统深入12-架构-热升级的完整流程

一、热升级流程

在这里插入图片描述

1.1、将旧Nginx文件换成新Nginx文件(注意备份)

  1. 只替换二进制文件。
  2. 大部分场景下,我们新编译的nginx文件所指定的相应的配置选项,比如说配置文件的目录在哪里,log所在的目录在哪里等等,必须保持和老的nginx是一致的,否则我们无法复用nginx conf文件
  3. 如果我们只替换二进制文件,请注意我们要备份。在替换的时候,新版本的linux中要求你在覆盖一个正在使用的文件时,加上 -f。

1.2、向master进程发送USR2信号

  1. 现在我们向老的nginx其中master进程发送USR2。发送完USR2信号以后,现有的master进程会做以下几件事。

1.3、master进程修改pid文件名,加后缀.oldbin

1. 这样做是为了给新的master进程让路。
2. master进程和worker进程,虽然他们都可以接受信号,但是为了管理方便,我们通常不会对worker进程直接发送信号,所以我们依赖于master进程,它必须把它的pid保存下来。
3. 为了给新的master让它使用 pid.bin 这样一个文件名,所以我们先把老的pid文件改名。 

1.4、master进程用新Nginx文件启动新master进程

  1. 我们用新的二进制文件启动新的master进程,所以到此为止会出现两个master进程和老的worker进程。
  2. 新的master进程会自动地去启动新的worker进程。

1.5、向老master进程发送QUIT信号,关闭老master

  1. 怎样找到老的master进程,我们需要用ps看到master进程的进程号或者通过.oldbin文件找到老的master进程的进程号向这个进程号发送信号。
  2. 老的master进程会优雅的关闭老的worker进程。这样的话,我们的热升级就结束了。

二、回滚:向老master发送HUP,向新master发送QUIT

  1. 但是老的master进程一直是保存下来的,这是为什么?
    1. 方便我们回滚,也就是发现新的nginx程序有问题了,这时候因为老的master进程还在,所以我们通过向它发送HUP信号,相当于执行了一次reload,它会起新的worker进程,再向新的master发送QUIT信号,也就是要求其对应的新的worker进程优雅的退出,这就实现了一个回滚。

三、热升级流程图

在这里插入图片描述

  1. 如图(从左往右),一开始老的master进程启动了四个绿色的worker进程。
    1. 当我们更新了nginx的二进制文件以后,向老的master进程发送SIGUSR2信号,这时候老的master进程会把自己的pid文件改名。这时我们认为它是黄色的这样进程。
    2. 启动新的master进程是怎样起的呢?它起了一个新的子进程,也就是说新的master进程是老的master进程的子进程,但是这个子进程是使用了新的二进制文件载入来启动的。
    3. 所以上是这样一个流程,在中间的时候,新老nginx并存,但老的master开始关闭监听端口,然后所有的(黄色的)老的worker进程开始优雅地退出。在完成以后,就只有新的master进程存在了。
  2. 以上可以通过热升级实现不停机,更新我们的nginx.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值