nginx平滑升级

平滑升级:在不关闭老进程的情况下启动新进程,业务持续运行,新进程逐步取代老进程,实现平滑升级

首先确认旧的nginx进程是存在在的

ps aux | grep nginx

开始编译安装新版本1.18.0的nginx

wget http://nginx.org/download/nginx-1.18.0.tar.gz

tar -xzvf nginx-1.18.0.tar.gz -C /usr/local/

先获取旧版本nginx编译的选项

/usr/local/nginx/sbin/nginx -V

拿到这个选项,然后放在新版本nginx里面,执行configure

cd /usr/local/nginx-1.18.0.tar.gz

./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream

新下载的nginx在执行./configure的时候--prefix指向旧版本的nginx的安装目录

make

先备份旧的nginx二进制可执行程序

cd /usr/local/nginx/sbin/nginx

cp nginx nginx.back

找到nginx-1.18.0新版本的nginx的二进制执行程序

cd /usr/local/nginx-1.18.0/

cd objs

里面的这个nginx就是我们要拿到的新版本的nginx可执行程序文件

使用nginx-1.18.0的二进制文件将nginx-1.16.0的二进制文件进行强制覆盖

[root@mmy objs]# cp -f nginx /usr/local/nginx/sbin/nginx

cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y

设定旧的服务不再接收用户请求(下线),新服务启动子进程接收用户请求(上线)

先查看当前未升级的nginx进程(这是旧版本的nginx进程)
ps aux | grep nginx

找到nginx父进程(master)的pid号,现在对其发送USR2信号

kill -USR2 17440

#设定新的子进程开始接收用户的访问请求,旧的不再接受用户的访问请求

再次查看进程

ps aux | grep nginx

现在是nginx的新老版本的进程共存的一种情况。虽然现在旧版本的nginx进程还存在,但是已经不再接受用户的请求了。除此之外,旧版本的nginx进程也依然处于监听的状态,我们通过lsof命令可以看到,比如:

虽然在监听,但实际不会处理新连接,因为fd已经从epoll中移出了。另外,旧master是新master的父进程,所以新master才能共享打开的监听端口。保留旧版本的master是为了方便回滚(当然你可以发信号QUIT或者直接杀掉进程)

进行旧服务进程的关闭

kill -WINCH 17440

# 进行旧服务进程的关闭,该pid号是旧版本的nginx的master进程的pid号

再次查看当前nginx进程


可以看到现在的旧版本的nginx的worker进程已经全部被杀死了,只剩下的旧版本nginx的master进程
确定升级没有任何问题的话,可以把这个master进程给杀掉。

kill -QUIT 17440

#把旧master进程杀掉

再次查看进程只剩下新的nginx进程,版本也是最新的版本,到此nginx平滑升级完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值