Nginx热部署步骤
1. 备份旧的nginx二进制可执行文件
cp nginx nginx.bak
2. 向Nginx的Master主进程发送SIGUSR2命令,在原来的master和worker子进程上创建新的master和worker进程
此时,新旧master和worker并行存在
kill -s SIGUSR2 $Master_PID
3. 查看进程pid所在目录,此时多了个文件: nginx.pid.oldbin
查看进程pid目录:
ll /var/run/nginx
说明:
文件nginx.pid.oldbin中存储的就是旧的master进程的pid
而新产生的文件nginx.pid中存储的是新产生的master进程的pid
4. 向旧的master进程发送命令,退出旧的master进程下的子进程
kill -s SIGWINCH $OLD_Master_PID
执行完成后,此时只会存在旧的master进程,和新的master进程以及新的master进程下的子进程
5. 确认新的进程是否运行正常,同时要确认旧的master进程的任务均已完成,此时,退出旧的master进程
kill -s SIGQUIT $OLD_Master_PID
此时,查看/var/run/nginx下的nginx.pid.oldbin,也已经被删除
6. 回滚方案
当执行到上面第4步,即当前nginx只剩下旧的master进程和新的master及其子进程时,发现新的待发布的nginx程序有问题,达不到我们的预期,则进行回滚
在上面第4步执行完成后,执行下面命令,进行旧的子进程回滚:
kill -s SIGHUP $OLD_Master_PID
然后执行下面命令,退出新的master进程及其子进程
kill -s SIGQUIT $NEW_Master_PID
上述两步,即可完成从新的进程回滚到旧的进程
7. 注意:
热部署过程中,原有的目录结构不能变化,新旧就成切换一定不能更改目录