1.什么叫作Nginx的平滑升级?
在不停止Nginx服务,不中断用户网站的访问,不丢请求,浏览器不会报错502/404的前提下把旧版本的Nginx,替换成新版本Nginx,全程网站一直访问用户毫无感觉
2.信号参数
kill 命令 传输信号给进程
kill不仅仅可以杀死进程,其底层核心是给进程传递一个信号!因为kill -9与kill -15使用较多,给大家带来错觉!
重点:
平滑升级
kill -USR2 pid
关闭master下面的所有work(子进程)
kill -WINCH pid
优雅的退出master
kill -QUIT pid
3.平滑升级
① 旧的先不停掉
② 新的又可以起来
③ 旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程
-USR2 平滑启动一个新的进程(平滑升级)
-WINCH 优雅的关闭子进程(Nginx分为master主进程以及worker子进程)
-QUIT 优雅关闭主进程
图解
第一步:编译安装新软件
注意:systemctl管理的nginx软件,没办法使用平滑升级,只有原生启动的Nginx才可以使用平滑升级
原生启动命令:cd /usr/local/nginx ; sbin/nginx
systemctl stop nginx
cd /usr/local/nginx/
sbin/nginx
ps -ef |grep nginx
tar xvf nginx-1.26.2.tar.gz
cd nginx-1.26.2
yum install openssl-devel -y
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_modul
make && make install
为什么一定要通过systemctl stop nginx?
答:systemd内部的管理机制没有完全支持Nginx平滑升级!!!
第二步:升级新版本,需要把软件的安装路径,指定到旧版本上
第三步:新旧版本同时运行(重点)
kill -USR2 旧的主进程号
第四步:查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
kill -WINCH 旧的主进程号
kill -QUIT 旧的主进程号
-WINCH:代表关闭主进程下面的所有worker进程
-QUIT:代表优雅的退出master进程
小结:
工作中经常需要对旧版本程序进行升级操作,如MySQL、Nginx等等,但是Nginx本身有两种升级方式。
重装升级:需要停服,然后删原目录,重新编译安装!
平滑升级:不需要停服,直接在原有基础上进行升级!
kill-USR2平滑升级
kill-WINCH移除当前进程的所有子进程(worker进程)
kill-QUIT代表优雅的关闭master主进程