nginx热部署实现版本升级

在nginx/sbin目录下,有一个文件叫nginx,是nginx的二进制可执行文件,当nginx需要升级的时候,我们可以直接将新的nginx二进制文件替换掉这个旧的二进制文件。然后通过热部署,实现nginx版本的平滑升级。

热部署的步骤如下:

  • 备份sbin目录下旧的nginx
  • 将升级过的nginx二进制文件放入sbin目录下
  • 用ps -ef | grep nginx命令找到旧nginx的master进程的pid(假设值为1000)
  • 给1000号进程发送命令:kill -USR2 1000(这时候执行ps -ef | grep nginx命令可以看到系统重新开启了一个nginx master进程以及n个worker进程,旧的nginx master进程和worker进程依旧存在,只是旧的nginx不在监听设置的端口,现在请求会平滑过渡到新的nginx进程上)。还会发现,新的master进程的父进程id就是旧的master进程的id
    nginx热部署实现版本升级_第1张图片
  • master进程会将nginx.pid文件重命名为nginx.oldbin,并将新的master pid存放在nginx.pid文件中
    nginx热部署实现版本升级_第2张图片
  • 向旧的nginx发送关闭信号:kill -WINCH 1000(这时候旧的nginx worker已经kill掉了,但是旧的nginx master依旧存在,这是因为为了做版本回退)
    在这里插入图片描述

回滚流程:

  • 向旧的master发送HUP信号,旧的master进程会重新拉起一个worker进程(黄色区域的worker进程的父进程id为就的master进程的id)
  • 向新的master发送QUIT信号,新的master进程会及其它的worker进程都会退出,并且删除master.pid文件,恢复master.oldbin文件为master.pid文件
    nginx热部署实现版本升级_第3张图片
    nginx热部署实现版本升级_第4张图片

你可能感兴趣的:(Nginx)