前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx平滑升级

Nginx平滑升级

作者头像
江湖安得便相忘
发布2019-08-21 11:09:16
1.2K0
发布2019-08-21 11:09:16
举报

直接升级一时爽,服务宕机火葬场

以下对正在升级的机器简称为目标机器,将要升级的软件版本简称为目标版本

升级前准备

1. 下载目标版本nginx源码包,这里举例使用nginx-1.15.9

2. 升级前到生产环境服务器查看当前版本的编译参数,然后采用相同编译参数进行源码编译测试,检查是否能够正常编译,若无法正常编译可考虑更换目标版本

平滑升级方法

非集群机器平滑升级

1. 上传目标版本源码包到目标机器

2. ** 备份当前版本nginx

3. 通过命令查看当前版本的nginx编译参数(需要注意的是检查编译参数内是否存在一些含有路径的外部库,并检查服务器是否有存留相关库)

代码语言:javascript
复制
/path/to/nginx -V  # 查看编译参数

4. 解压目标版本软件包,进入当前目标版本的源码目录,使用上一步获取的编译参数,包括prefix参数必须相同(平滑升级需要),配置并编译完成后,不需要执行make install

代码语言:javascript
复制
tar -zxf /path/to/nginx-1.15.9.tar.gz  # 解压压缩包
cd /path/to/nginx-1.15.9/              # 进入源码目录
configure --prefix=/path/to/ ...       # 配置参数
make   # 编译

5. 进入当前源码目录下的objs,拷贝objs内的nginx程序文件至当前版本nginx命令的目录覆盖即可

代码语言:javascript
复制
cp -a ./objs/nginx /path/to/nginx

注意:由于此时原版本nginx正在运行中,所有程序、配置等数据均在内存中,覆盖原版本程序文件不会影响当前nginx进程,但此时不能kill掉nginx进程。

6. 查看原版本nginx进程

代码语言:javascript
复制
ps -ef | grep nginx

7. 下面开始进入平滑升级阶段,通过nginx内置的USR2信号机制,开启两个版本的进程

代码语言:javascript
复制
kill -USR2 11830    # 11830是上图中的原版本nginx主进程

通过ps命令查看由nginx的USR2信号启动的目标版本的进程,可以看出主进程5788是由11830启动

8. 此时访问web服务会随机分配至两个版本的进程,为了验证新版本是否能够正常服务,依然通过nginx的WITCH信号逐步关闭原版本的nginx子进程,指保留原版本主进程

代码语言:javascript
复制
kill -WITCH 11830

通过ps命令查看WITCH信号关闭的原版本的子进程

9. 此时访问nginx服务,检查服务是否正常服务,请求响应、各模块功能、日志等,如果没有问题则可以杀掉原版本nginx主进程,完成平滑升级

代码语言:javascript
复制
kill 11830

10. 如果存在问题,则可以立刻通过nginx HUP信号回复原版本nginx进程,再停掉目标版本进程,使用备份恢复原版本nginx程序文件

代码语言:javascript
复制
kill -HUP 11830 && kill 5788

集群机器升级

1. 停止负载对目标机器的流量分发

2. 直接升级一时爽,一直直接升级一直爽

3. 验证服务正常,重新挂到负载,并依次进行升级集群内机器

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可回收BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档