nginx的平滑升级(Nginx平滑升级版本)
Nginx平滑升级版本
一 ,查看现目前版本 ,准备预升级版本的安装包 #查看nginx版本 /usr/local/nginx/sbin/nginx -v #测试nginx访问是否正常 ,此处开放的为19999端口 #新建下载目录 mkdir -p /home/nginx #下载预升级版本的安装包 wget -c https://nginx.org/download/nginx-1.23.0.tar.gz #解压 tar zxf nginx-1.23.0.tar.gz 二 ,编译安装新版本 #进入解压目录 cd /home/nginx/nginx-1.23.0/ #使用默认配置并指定配置目录 ./configure --prefix=/usr/local/nginx-1.23.0 #查看是否报错 echo $? #编译安装 make && make install echo $? #查看是否编译成功 ls -l /usr/local/nginx-1.23.0/ #查看版本 /usr/local/nginx-1.23.0/sbin/nginx -v 三 ,升级到新版本 #查看当前版本 /usr/local/nginx/sbin/nginx -v #nginx version: nginx/1.13.7 cd /usr/local/nginx/sbin/ #备份原有nginx二进制文件 mv nginx nginxback #拷贝新的二进制文件到该目录 cp /usr/local/nginx-1.23.0/sbin/nginx ./随后进行平滑升级
#查看当前运行nginx的进程号 ps -ef|grep nginx # kill -USR2 9629 ps -ef|grep nginx这时新的master进程已经正常开启 ,但老的work进程也存在 ,所以我们使用下面的命令 ,将老的work进程发出平滑停止的信号 ,如下:
kill -WINCH 9629 ps -ef|grep nginx此时 ,老的work进程已经停止 ,接下来我们测试是否能正常访问:
#在查询当前版本 /usr/local/nginx/sbin/nginx -v #nginx version: nginx/1.23.0 #版本号以改变就代表升级完成 ps -ef|grep nginx此时可以看见老的master进程还在 ,如果在版本升级完成后,没有任何问题 ,需要关闭老的master进程的话 ,可以使用下面的命令:
kill -QUIT <old_master_PID> kill -QUIT 9629到此nginx平滑升级就结束了,平滑升级的好处在于不用停止ginx服务 ,对访问用户来说是完全感知不到 ,所以nginx热部署就已经完成了 。
四 ,如果在升级之后发现因版本问题不兼容应用程序 ,怎么回退在上面的结果中 ,我们也能看到老的master进程是一直存在 ,在没有手工关闭前 ,它是不会自已关闭的 ,这种设计是有好处的 ,好处就是为了升级新版本后 ,如果出现问题能及时快速的回滚到上一个稳定版本 。
也就是说 ,在检查出没问题前 ,请务必不执行以下指令 。
kill -QUIT <old_master_PID>——下面是回退的操作——
ps -ef|grep nginx #root 9629 1 0 14:18 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c #/usr/local/nginx/conf/nginx.conf #root 20858 9629 0 14:33 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c #/usr/local/nginx/conf/nginx.conf #nobody 20859 20858 0 14:33 ? 00:00:00 nginx: worker process #root 22774 19064 0 14:37 pts/0 00:00:00 grep --color=auto nginx cd /usr/local/nginx/sbin/ #重命名nginx二进制文件 mv nginx nginx-1.23.0 #把之前备份的修改回来 mv nginxback nginx kill -USR1 9629 ps -ef|grep nginx #root 9629 1 0 14:18 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c #/usr/local/nginx/conf/nginx.conf #root 20858 9629 0 14:33 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c #/usr/local/nginx/conf/nginx.conf #nobody 20859 20858 0 14:33 ? 00:00:00 nginx: worker process #root 22774 19064 0 14:37 pts/0 00:00:00 grep --color=auto nginx ./nginx -v #nginx version: nginx/1.13.7接下来测试是否能正常访问,如果同上面一样可以正常访问 ,就证明已经回滚成功 ,这个回滚的操作对用户来说也是不可感知的 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!