Nginx 的平滑升级

Posted 锦衣admin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 的平滑升级相关的知识,希望对你有一定的参考价值。

信号参数

Linux之kill命令

Kill 命令 传输信号给进程 Nginx的主进程,以下几个命令都是发送给Nginx的master 进程的

# TERM, INT(快速退出,当前的请求不执行完成就退出) -s stop

# QUIT (优雅退出,执行完当前的请求后退出)  -s quit

# HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程) -s reload

# USR1 (重新打开日志文件)  -s reopen

# USR2 (平滑的升级nginx二进制文件  拉起一个新的主进程  旧主进程不停止)

# WINCH (优雅的关闭worker进程),关闭后想在起worker进程,重启服务或者 kill -HUP master进程

Nginx 重新安装

①停止掉服务,删除编译的安装的软件包和源码包

②重新解压编译安装即可

注意:如果有需要,请备份配置文件和网站目录里的资源文件

Nginx 平滑升级版本

升级软件版本之后,需要启动新的版本,启动不了,端口已经被占用,如果直接把旧版本的服务停止掉,会影响线上业务的使用,所以需要在不关闭Nginx 的情况下进行平滑升级

手动平滑升级

平滑升级思路:

① 旧的不先停掉

② 新的又可以起来

③ 旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程

-USR2 平滑启动一个进程(平滑升级)
-WINCH 优雅的关闭子进程
-QUIT 优雅关闭主进程

第一步:上传新版本源码,并且编译安装

  • 在不关闭Nginx服务的情况进行编译安装,新版本编译配置的参数需要和旧版本的一致
  • 升级新版本,需要把软件的安装路径,指定到旧版本上。
  • 以下操作完成之后,会把原来的旧版本备份为nginx.old,即sbin/ 目录下会有两个Nginx执行文件
# cd /usr/local/nginx/sbin/
#l ./nginx -V				=>	查看旧版本的配置参数


# tar xf nginx-1.16.0.tar.gz		=>	进入到上传新版本的目录解压
# cd nginx-1.16.0
#l ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
		=>	注意:还是旧版本的配置参数


# make && make install

第二步:给旧版本的主进程好发送一个平滑升级的信号

# ps -ef|grep nginx				=>	查看Nginx主进程号,此时只有旧版本的进程


# kill -USR2 主进程号			=>	发送完毕后,会拉起两个主进程,一个旧的一个新的

第三步:停止旧版本的进程

  • 查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
# kill -WINCH 旧的主进程号


# kill -QUIT 旧的主进程号

自动平滑升级

  • 在nginx中,默认提供了平滑升级的操作,前面步骤和手动升级一样,在配置完和旧版本一样的参数后
  • 编译安装的时候多加一个参数,配置完后会产生一个Makefile里面有关于upgrade的说明

编译安装:

# cd /usr/local/nginx/sbin/
#l ./nginx -V				=>	查看旧版本的配置参数


# tar xf nginx-1.16.0.tar.gz		=>	进入到上传新版本的目录解压
# cd nginx-1.16.0
#l ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
		=>	注意:还是旧版本的配置参数

# make && make install && make upgrade		=> 增加make upgrade	会自动实现平滑升级

以上两种方式可以实现Nginx的平滑升级
注意:如果用systemd服务事先启动的Nginx,有可能平滑升级后Nginx进程会停止,用Nginx的二进制可执行程序执行没问题

用回旧版本

第一步:删除sbin/目录下的nginx执行程序

# cd /usr/local/nginx/sbin/
# rm -rf nginx					=>	将新版本的执行程序删掉
# mv nginx.old nginx			=>	将旧版本的改回

# systemctl restart nginx		=>	重新启动即可

以上是关于Nginx 的平滑升级的主要内容,如果未能解决你的问题,请参考以下文章

Nginx平滑升级版本!

nginx的平滑升级

Nginx 的平滑升级

Nginx 的平滑升级

使用 Nginx 实现平滑升级

nginx平滑升级