使用 Nginx 实现平滑升级
一、使用 Nginx 实现平滑升级
1.主进程支持的信号
2.配置 Nginx 平滑升级
一、使用 Nginx 实现平滑升级
实现原理:
- 在旧进程运行时,启动新的进程;
- 旧进程处理没有完成的请求,但不再接收新的处理请求,而是由新进程负责接收请求并进行处理;
- 最后通过关闭旧进程的 PID,使新的进程完全兼容。
1.主进程支持的信号
2.配置 Nginx 平滑升级
1)准备软件包并查看旧版安装选项
[root@localhost ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz [root@localhost ~]# ls anaconda-ks.cfg nginx-1.12.0.tar.gz nginx-1.18.0.tar.gz [root@localhost ~]# nginx -V nginx version: nginx/1.12.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) configure arguments: --prefix=/usr/local/nginx/ --user=nginx --group=nginx
2)安装新版本(需要注意新版本是否需要安装依赖包)
[root@localhost ~]# tar zxf nginx-1.18.0.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/nginx-1.18.0/ [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make
3)备份原来的二进制文件
[root@localhost nginx-1.18.0]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-$(date +%F) [root@localhost nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/ [root@localhost nginx-1.18.0]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost nginx-1.18.0]# cd [root@localhost ~]# /usr/local/nginx/sbin/nginx -V
4)使用信号实现热升级
[root@localhost ~]# ps aux | grep nginx | grep -v grep [root@localhost ~]# kill -USR2 Nginx主进程 (master)
- 向主进程发送 USR2 信号,Nginx 会启动一个新版本的 Master 进程和工作进程,和旧版本一起处理请求。
[root@localhost ~]# kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin) # 关闭老版本的 Worker 进程 [root@localhost ~]# kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin) # 关闭老版本的 Master 进程 [root@localhost ~]# ps aux | grep nginx | grep -v grep [root@localhost ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.18.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) configure arguments: --prefix=/usr/local/nginx/ --user=nginx --group=nginx