nginx热部署(平滑升级)

平滑升级就是不断开原有连接(不重启服务),然后升级到新版本

实验环境:rhel7.3

nginx安装包:nginx-1.15.6.tar.gz  nginx-1.16.0.tar.gz

安装包来源:www.nginx.org

首先我安装nginx-1.15.6版本的nginx,然后平滑升级到1.16.0版本的nginx,操作如下:

tar zxf nginx-1.15.6.tar.gz
cd nginx-1.15.6
yum install -y gcc pcre-devel zlib-devel #安装编译需要的环境以及库
./configure --prefix=/usr/local/nginx
make && make install
cd /usr/local/nginx
./sbin/nginx    # 启动nginx
ps -ef | grep nginx   # 查看nginx进程
./sbin/nginx -v  #查看nginx版本号

平滑升级:

tar zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx
make

#注意:这里不再使用make install,如果再次使用此命令,相当于把所有编译的东西再次放进了usr/local/nginx下,会造成错误。当make编译后,已经生成了二进制文件,在objs目录下我们只需要复制这部分二进制文件到/usr/local/nginx/sbin,然后再通过kill发送一些信号就可以完成平滑升级。

为了防止新版本出现问题,给原有的二进制文件做一个备份,出现问题之后还能再回到原版本

cp /usr/local/nginx/sbin/nginx nginx.old

将新版本编译好的二进制文件复制过来

cp /root/nginx-1.16.0/objs/nginx /usr/local/nginx/sbin/nginx

发送信号,告诉原nginx进程,拉起新的nginx进程

kill -USR2 xxxx   #  xxxx表示原nginx进程

这时,通过ps -ef | grep nginx就可以看到多了一个master进程和一个worker进程

最后,我们告诉nginx优雅的关闭work进程,所谓优雅的关闭,就是等客户端释放连接后再关闭这个进程

kill -WINCH xxxx   # xxxx表示原nginx进程

查看现在的nginx版本号

 /usr/local/nginx/sbin/nginx -v

如何返回原版本的nginx
1.将原版本的nginx二进制文件复制到sbin下

 cp /usr/local/nginx/sbin/nginx.old nginx

2.给原版本的nginx的master发送一个信号,拉起worker进程

 kill -HUP xxxx     # xxxx 表示原nginx的master进程

3.给新版本的nginx的master发送一个信号,告诉它以后建立的连接都在原版本的nginx进程

 kill -USR2 xxxx   xxxx表示新版本的进程

4.当新版本的连接断开之后,我们就可以关闭新版本的nginx的worker进程了
 

  kill -WINCH xxxx   xxxx表示新版本的nginx进程
发布了124 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lm236236/article/details/89887988