nginx不停机升级
查看原编译参数:
升级一般是添加新的模块,或者升级版本,所以要参考以前编译的模块,把模块信息预编译进去;如果不添加,那么以前的模块就不能使用了
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
配置/编译/安装
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make && make install
生成新的master进程
给正在运行nginx的master进程发送一个信号,告诉master要热部署,做一次版本升级,这个信号是USER2,USER2信号用来传递热部署的信号
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
[root@localhost nginx-1.16.0]
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8097 8054 0 21:09 ? 00:00:00 nginx: worker process
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:13 ? 00:00:00 nginx: worker process
优雅退出老worker进程:
向老的master进程发信号,告诉它关闭其worker进程:
[root@localhost nginx-1.16.0]
[root@localhost nginx-1.16.0]
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:16 ? 00:00:00 nginx: worker process
升级完成
经过一段时间测试,服务器没问题,退出老的master:
[root@localhost nginx-1.16.0]
[root@localhost nginx-1.16.0]
root 8134 1 0 21:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:24 ? 00:00:00 nginx: worker process
回滚:升级过程有问题,退回原版本
旧版本的主进程不要kill关闭,以防万一升级失败还可以进行回滚,向老的master进程发送命令,再将新版本关掉。所以第五步的老的master进程是不会自动退出的,保留着,允许我们做版本的回退
重新拉起老的worker进程:
注意回滚是在老master未退出时才能做的 如果完全升级后,需要停止nginx服务,将nginx.old重命名为nginx在启动nginx服务
[root@localhost nginx-1.16.0]
[root@localhost nginx-1.16.0]
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:16 ? 00:00:00 nginx: worker process
nginx 8154 8054 1 21:19 ? 00:00:00 nginx: worker process
退出新的master进程:
[root@localhost nginx-1.16.0]
[root@localhost nginx-1.16.0]
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8154 8054 0 21:19 ? 00:00:00 nginx: worker process
换回nginx文件
先删除新的nginx二进制文件:
rm -rf /usr/local/nginx/sbin/nginx
还原老的nginx 二进制文件:
mv /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
|