Nginx(十六)热更新

一    热更新的定义

热更新:也即'平滑升级',指在nginx'软件更新'的情况下'不终止'nginx'对外提供服务',业务'无损',用户'无感知'

备注: 只适合用于'源码间安装升级'

++++++++++++'nginx相关操作的原理'++++++++++++

nginx 实际上上通过'信号量'去'控制进程'的,平时所有的'关闭、重启'等操作的原理都是通过'不同的信号'发送给'nginx 主进程'来完成的

二    信号量

①    nginx自身的信号量

++++++++++++++'nginx -s signal'++++++++++++++

Where signal may be one of the following:

stop   — fast shutdown
quit   — graceful shutdown --> '优雅退出'
reload — reloading the configuration file -->'修改配置文件让其生效,不影响已有的业务'
reopen — reopening the log files  -->'日志切割'

备注:这些'信号命令',只能在'nginx启动后'才可能'执行成功'

②    操作系统的信号

TERM, INT        Quick shutdown     (强制关闭:'暴力'操作,'正常'进行的请求'突然中断')
QUIT           Graceful shutdown   (优雅关闭:会在'请求处理完成之后','自动'关闭)-->等待'工作进程结束后'再退出
HUP            Configuration reload Start the new worker processes with a new configuration Gracefully shutdown the old worker processes 

特点: '优雅'的'重新加载配置文件',如果'修改完配置文件',需要'重启'的话,可以使用这个信号量,使用该信号量重启并'不会关闭进程'和'中断请求')

USR1          Reopen the log files ('重写一个日志文件') 
USR2          Upgrade Executable on the fly ('升级执行文件') 
WINCH          Gracefully shutdown the worker processes ('优雅的关闭工作进程')

③    什么是graceful shutdown

graceful shutdown:是指'server不再处理新的连接',但是进程'不会立即退出',待'所有连接断开后'再'退出进程'

三    实战

(1)实验已知条件

热部署将nginx-'1.16.1'版本升级到nginx-'1.19.3'

①   查看旧版nginx的编译参数

②    升级新版本之前,先备份旧版本的二进制文件

③    编译版本nginx源码包

make: 会在'当前目录'生成相关的'nginx可执行文件'等

make install : 会将nginx相关的文件(配置文件和二进制文件)-->'复制'到指定的目录

注意:'不要'执行'make install',否则会'进行覆盖'

④  用新版本的替换nginx可执行程序,并对比前后nginx进程pid的变化

pid没有发生变化: 因为没有让'新版本'的二进制'可执行程序'运行

⑤  发送USR2信号:向主进程(master)发送USR2信号,nginx会启动一个新版本的master进程和对应工作进程,新版本处理请求

备注: 最好'确保配置文件无报错',这里'假设配置文件'在'新旧版本'都'没有发生变化'

nginx'新版本的可执行文件' -t

通过'给master发送信号'进而'传递给worker进程',处理完'手里面的请求',就'不再接收新'的请求了

手里面的请求: 如果'已经建立连接','正在处理'客户端请求的,处理完之后,就'不再接收'请求了

⑥  发送WINCH信号:向旧的Nginx主进程(master)发送WINCH信号,它会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理

说明: 此时'旧版本'的'master'进程'仍然存在'

好处: 可以在'新版本'升级'失败'的情况下,需要'回退到旧版本'时候使用

⑦  查看是否更新成功

⑧  如果更新失败,如何回退

1)首先是二进制文件的回退

说明1: 之前'备份的旧版本的nginx可执行文件'派上用场了

需求: 让'新版本'的master进程'停止接收'新的请求,并让'老的master进程'重新'唤醒woker进程',来接收请求

'回滚步骤':向'老的master进程'发送HUP信号

+++++++++++++'如果这时需要回退继续使用旧版本'+++++++++++++

实施步骤: 可向'旧的nginx主进程'发送'HUP'信号,它会'重新启动工作进程',仍使用'旧版配置文件',然后可以将'新版nginx进程杀死'(使用QUIT、TERM、或者KILL)

继续: 让'新的master'的'worker进程'不再接收请求

⑨  验证nginx版本号,并访问测试

⑩  关闭有问题新的master进程

注:如果在版本升级完成后,'没有任何问题',需要'关闭老的master进程'的话,可以使用下面的命令:

kill -QUIT old_master_PID

发送QUIT信号:升级完毕,可向旧的Nginx主进程(master)发送('QUIT、TERM、或者KILL')信号,使旧的主进程退出

四    相关参考

参考1

参考2

参考3

深层次理解

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值