nginx-平滑升级
nginx平滑升级是在服务不中断的情况下,将低版本的nginx升级到高版本,在升级的过程中可以继续响应服务请求
1、进行新版本nginx的编译
原nginx版本:1.14,路径:/opt/nginx-1.14
新nginx版本:1.18
注意:
只编译(make),不安装(make install)
新版本的nginx在编译时要与原版本的nginx编译参数、路径一致
编译完成后查看新nginx版本:
cd /root/nginx-1.18.0
objs/nginx -t -c /opt/nginx-1.14/conf/nginx.conf
测试编译程序是否可用:
objs/nginx -t -c /opt/nginx-1.14/conf/nginx.conf
查看原nginx版本:
/opt/nginx-1.14/sbin/nginx -v
2、替换原有nginx启动程序
备份原nginx二进制文件
cd /opt/nginx-1.14/sbin/
mv nginx nginx.old
将新编译的1.18版本的nginx二进制文件复制到原nginx的路径下
cp objs/nginx /opt/nginx-1.14/sbin/
chown -R nginx:nginx /opt/nginx/sbin
3、启动新版本的进程
查看原版本nginx(1.14)的master进程号
ps -ef | grep nginx
或:cat /opt/nginx/nginx.pid
nginx进程号为1524
发送USR2信号给旧版本进程号(1524),使旧nginx停止接受新的请求,同时启动新版本的nginx进程,并开始处理新的请求:
kill -SIGUSR2 `cat /opt/nginx-1.14/nginx.pid`
注意在脚本中执行要使用kill -USR2
这时在nginx目录下会生成一个新的nginx.pid文件,这是新的nginx的master进程号,旧的master进程号在nginx.pid.oldbin文件中
发送WINCH信号给旧版本进程号(1524),使旧nginx的worker进程处理完原有的请求后退出:
kill -WINCH `cat /opt/nginx-1.14/nginx.pid.oldbin`
查看新nginx的版本
查看此时nginx的进程,发现有两个nginx的master进程,新的master进程已经启动,进程号为1585
原nginx的worker进程已经退出,新的worker进程已经启动,1586、1587为新nginx的worker进程号
查看连接情况
此时我们发现所有的请求已经由新的worker进程处理
这时向原nginx的主进程发送退出信号
kill -QUIT 1524
旧的进程完全退出
nginx的平滑升级结束,成功由1.14升级到1.18
4、回退方案
平滑升级失败,新nginx的worker进程无法处理请求,执行回退:
向旧nginx的msater进程发送HUP信号,进程平滑重启
kill -HUP 1524
向新nginx的master发送QUIT信号,使其退出
Kill -QUIT 1585
回退成功
附:平滑升级脚本