平滑升级就是不断开原有连接(不重启服务),然后升级到新版本
实验环境: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进程