Nginx热升级指服务不中断情况下用新的Nginx二进制文件替换老的Nginx二进制文件。
1. 备份和替换Nginx二进制文件
git clone https://github.com/nginx/nginx.git
cd nginx
git checkout release-1.22.0
./auto/configure && make && make install && /usr/local/nginx/sbin/nginx
git checkout release-1.22.1
./auto/configure && make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.backup
cp /root/code/nginx/objs/nginx /usr/local/nginx/sbin
2. 发送USR2给老master进程来启动新master进程
kill -12 老master进程
新master进程是老master进程的子进程
老master进程记录在/usr/local/nginx/logs/nginx.pid.oldbin中,新master进程记录在/usr/local/nginx/logs/nginx.pid中。
新请求由新master和新worker处理。
老master进程不退出原因在于回滚。
3. 升级
向老master进程发送SIGQUIT信号。
kill -3 老master进程
4. 回滚
向老master发送信号SIGHUP(reload,创建新worker),向新master发送信号SIGQUIT。
回滚时只向新master发送信号SIGQUIT也没问题,不增加新的worker进程。
kill -l:查看所有信号值
参考资料
nginx热升级