nginx平滑升级
平滑升级是什么:
在线上业务不停止的情况下,进行nginx的升级
过程简述:
- 在不影响老进程运行情况下启动新进程。
- 老进程负责处理还没有处理完的请求,但不在接受新的处理请求。
- 此时新进程接受处理新的请求。
- 当老进程处理完所有请求后,关闭所有连接后停止运行。
原理:
-
多进程模式下的请求分配方式
- nginx默认工作在多进程模式下,就是在进程启动完成配置加载和端口绑定等动作后,fork出指定数量的工作
进程,这些子进程会持有监听端口文件描述符(fd)并通过在该描述上添加监听事件来接受链接。
-
信号的接受和处理
- nginx主进程在启动完成后进入等待状态,负载相应个类系统消息
- 主进程支持的信号
信号 |
|
QUIT |
等待工作进程结束后在退出 |
KILL |
强制终止进程 |
HUP |
重新加载配置文件,使用新的配置启动进程,并逐步关闭当前进程 |
USR1 |
重新打开日志文件 |
USR2 |
启动新的主进程,实现热升级 |
WINCH |
逐步关闭工作进程 |
TIME,IN |
立即退出 |
信号 |
解释 |
TIME,IN |
立即退出 |
QUIT |
等待所有请求结束后再退出 |
USER1 |
重新打开日志文件 |
平滑升级演示
-
查看当前nginx版本
[root@nginx-up nginx]# nginx -v
nginx version: nginx/1.15.0 #当前版本1.15.0
-
去下载一个较新的安装包并解压
- 下载地址:http://nginx.org/download/
[root@nginx-up nginx]# ls
nginx-1.9.0.tar.gz #下载一个1.90版本
[root@nginx-up nginx]# tar -xf nginx-1.9.0.tar.gz -C /usr/local/src/
-
备份当前nginx的nginx文件
[root@nginx-up nginx-1.9.0]# cp/opt/data/nginx/sbin/nginx/opt/data/nginx/sbin/nginx_`date "+%F%H%M%S"` #根据自己安装目录进行备份,位置不一定。
[root@nginx-up nginx-1.9.0]# cd /opt/data/nginx/sbin/
[root@nginx-up sbin]# ls
nginx nginx_2020-08-02090940
-
在另一台机器上不断测试当前旧版本nginx是否正常运行。
[root@lnmp-nginx /]# while true; #利用while循环每秒检测一次心跳,进程出现问题可以及时停止升级。
> do curl 192.168.126.138; #升级过程中不断查看检测状态
> sleep 1;
> done