Nginx平滑升级
环境说明
当前服务器中正在运行Nginx服务,现想将当前运行的Nginx服务的版本经行升级,(从1.6升级到1.8,版本的跨度不要太大,容易造成服务的崩溃),且在服务不停止的前提下经行升级。
1. 在不停掉老进程的情况下,启动新进程。
2. 老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
3. 新进程接受新请求。
4. 老进程处理完所有请求,关闭所有连接后,停止。
实现步骤
1. 编译安装nginx-1.6
yum -y install pcre-devel zlib-devel #安装依赖包 useradd -M -s /sbin/nologin nginx #添加程序运行用户 tar -zxvf nginx-1.6.0.tar.gz -C /usr/src/ #解包 cd /usr/src/nginx-1.6.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install #配置编译并且安装 /usr/local/nginx/sbin/nginx #启动nginx服务
2. 编译nginx-1.8(只编译不安装)
tar -zxvf nginx-1.8.1.tar.gz -C /usr/src/ #解包 cd /usr/src/nginx-1.8.1/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make #配置编译并且安装
3. 查看升级之前的版本
#/usr/local/nginx/sbin/nginx -v nginx version: nginx/1.6.0
4. 备份旧版本的nginx的执行程序
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
5. 替换旧的Nginx的执行程序
cp /usr/src/nginx-1.8.1/objs/nginx /usr/local/nginx/sbin/
6. 使nginx的旧版本停止就收请求,有Nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
7. 查看nginx日志目录会生成一个nginx.pid.oldbin文件,存放旧版本nginx 的pid号
#ls /usr/local/nginx/logs/ access.log error.log nginx.pid nginx.pid.oldbin
8.查看升级升级后的版本
#/usr/local/nginx/sbin/nginx -v nginx version: nginx/1.8.1
9. 查看服务运行状态
netstat -aupt | grep nginx getnameinfo failed tcp 0 0 *:http *:* LISTEN 6666/nginx
10. 使用客户端验证Nginx服务是否可以继续访问