nginx升级与回退 热部署

Nginx的升级与版本回退(热部署)【只更换二进制文件 其他不动】

Nginx的进程分为两类 一类是master(主进程)进程一类是worker(工作进程)
如果在升级过程中在kill USR2 失败了 在错误日志中 说找不到nginx二进制文件的话可能是父子进程变量冲突 导致找不到文件 我们可以关掉nginx 然后用绝对路径去启用nginx
比如/usr/local/nginx/sbin/nginx 来启动它
nginx升级与回退 热部署_第1张图片

可以看到 nginx正在运行而且 我用的是1.14.2版本的
如果要升级到1.16.0 并且不影响客户访问 不中断服务
1.把正在运行的nginx二进制文件(也就是/nginx/sbin/nginx)进行备份
在这里插入图片描述
2.把下载好的nginx gz包解压
在这里插入图片描述
3.进入 解压之后的包内进行 与配置以及make (注意不进行make install)
在这里插入图片描述
nginx升级与回退 热部署_第2张图片
可以看到我们编译好的文件就在objs目录下
在这里插入图片描述
当然可以根据自己想要的模块 添加模块 也可以替换玩在装

4.然后进行二进制文件替换 用新的二进制文件替换旧的二进制文件
我们要做的就是把上面提到的objs目录下的nginx(1.16) 二进制文件 替换原先版本的nginx(1.14)二进制文件
在这里插入图片描述
-r表示保留权限 -f 表示强制替换 (如果不强制会报错 目标忙)
nginx升级与回退 热部署_第3张图片
可以看到已经做了替换 文件大小变了
5.用USR2(平滑的升级)信号告诉nginx的进程 要进行升级了 Kill -USR2 xxx(nginx master进程的进程号)
在这里插入图片描述
Ps查看进程号 然后用USR2信号告诉 nginx的master进程要进行热部署
在这里插入图片描述
新起来的master进程就是nginx 1.16的 原先的1.14的还没有停止
nginx升级与回退 热部署_第4张图片
使用WINCH 信号 让原先的nginx(1.14)从容地关闭
然后版本号 就变成了 虽然升级完成 但是原先旧版本的master进程并不会关闭,一旦发现问题 可以马上回退为原先的nginx1.14版本
nginx升级与回退 热部署_第5张图片

如果升级之后出现问题 我们还可以回退到原来的nginx1.14版本
1.把原先备份的nginx.old 还原回来
nginx升级与回退 热部署_第6张图片
2.启用原先的nginx的master进程
nginx升级与回退 热部署_第7张图片
HUP信号是平滑的启用
可以看到原先的nginx(1.14)已经启用 并且worker进程也有了
3.依次启动新的主进程(旧版本)和新的工作进程,现在两个版本的nginx实例会同时运行共同处理请求
nginx升级与回退 热部署_第8张图片
4.发送WINCH信号给新版本的nginx master进程 让它从容地关闭
nginx升级与回退 热部署_第9张图片
绿色代表nginx 1.16版本的master以及worker进程 红色代表nginx1.14的
可以看到发送WINCH信号以后 新版本的nginx1.16的worker进程已经关闭
5.查看版本号
nginx升级与回退 热部署_第10张图片
还原成功

你可能感兴趣的:(nginx)