热部署的概念:当从老版本替换为新版本的nginx的时候,如果不热部署的话,会需要取消nginx服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了不影响用户的体验,且需要版本升级,就需要热部署来升级版本
版本回滚的概念:当新版本上线之后出现问题,需要回到老版本,这时候就需要做版本回滚,其实就是在你做版本升级的时候,将老版本备份以下,然后替换新版本,之后杀死新版本的进程便可以
实验步骤:1:先从官网上拷贝nginx-1.14.2版本的链接,且需要源码部署
2:解压在/opt/目录下
3:创建nginx的进程 useradd -u 998 -s /sbin/nologin nginx
4:cd /opt/nginx-1.14.2进行预编译和编译安装,编译的话需要先安装devlopment或者安装gcc,gcc-c++,yum -y groupinstall devlopment或者yum -y gcc gcc-c++前面时间需要久一点,后面快一写
5:预编译的命令是$./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
$make
$make install
6:用echo $?检查有没有安装成功,成功的话则在下面设置控制命令nginxctl
7:$vi /usr/bin/nginxctl
#!/usr/bin/env bash
case $1 in
stop)
/usr/local/nginx/sbin/nginx -s quit
;;
start)
/usr/local/nginx/sbin/nginx
;;
reload)
/usr/local/nginx/sbin/nginx -s reload
;; *)
echo "please input (start|stop|reload)"
;;
esac

~ 8:chmod a+x /usr/bin/nginxctl #设置文件的执行权限
9:nginxctl start #启动nginx服务
10:这时候从浏览器上输入ip地址,便会显示nginx访问首页
11:现在开始进行热部署,将版本升级到nginx-16.0.1,从官网上拷贝下载链接
12:跟之前安装一样,不过到make之后就不一样了,不需要make install
13:[root@web3 nginx-1.16.1]# mv /usr/local/nginx/sbin/{nginx,nginx.old}#备份一下nginx-14.0.2版本,防止版本需要回退
[root@web3 nginx-1.16.1]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@web3 nginx-1.16.1]# cd objs #新版本的nginx命令在objs里
nginx ngx_auto_config.h ngx_modules.c
nginx.8 ngx_auto_headers.h ngx_modules.o
[root@web3 nginx-1.16.1]# cp objs/nginx /usr/local/nginx/sbin/nginx #需要将新版本的nginx命令替换掉原先版本的
[root@web3 nginx-1.16.1]# ps aux|grep nginx #此时查看nginx进程,看到有nginx进程在运行,还是老版本的进程
root 51891 0.0 0.0 20544 600 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 51893 0.0 0.1 20988 1560 ? S 21:49 0:00 nginx: worker process
root 66744 0.0 0.0 112708 984 pts/0 R+ 22:06 0:00 grep --color=auto nginx
[root@web3 nginx-1.16.1]# kill -USR2 51891 #优雅的关闭老版本进程,热部署主要就是依靠这条命令,正在访问的用户依然访问老版本,新用户访问则会访问到新版本的nginx
[root@web3 nginx-1.16.1]# ps aux |grep nginx #这时候看进程发现有4个进程,新老版本都有
root 51891 0.0 0.0 20544 792 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 51893 0.0 0.1 20988 1560 ? S 21:49 0:00 nginx: worker process
root 67798 0.1 0.1 20552 1588 ? S 22:07 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 67799 0.0 0.1 21004 1328 ? S 22:07 0:00 nginx: worker process
root 68006 0.0 0.0 112708 984 pts/0 R+ 22:07 0:00 grep --color=auto nginx
[root@web3 nginx-1.16.1]# kill -WINCH 51891 #这条命令的意思是让老版本不要去检测新用户访问的响应
[root@web3 nginx-1.16.1]# ps aux|grep nginx
root 51891 0.0 0.0 20544 792 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 67798 0.0 0.1 20552 1588 ? S 22:07 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 67799 0.0 0.1 21004 1328 ? S 22:07 0:00 nginx: worker process
root 69592 0.0 0.0 112708 980 pts/0 R+ 22:09 0:00 grep --color=auto nginx
[root@web3 nginx-1.16.1]# /usr/local/nginx/sbin/nginx -v #这时候检测版本就是1.16.1
nginx version: nginx/1.16.1
2版本回滚:
版本回滚和之前差不多,只是有一个问题需要注意,因为新版本不行,所以直接用kill命令就好,如果再需要升级版本,再进行热部署一遍即可
[root@web3 nginx-1.16.1]# vi /usr/bin/nginxctl
[root@web3 nginx-1.16.1]# mv /usr/local/nginx/sbin/{nginx,nginx.old-1.16.1}
[root@web3 nginx-1.16.1]# ps aux |grep nginx
root 21161 0.0 0.0 112708 984 pts/0 R+ 23:37 0:00 grep --color=auto nginx
root 51891 0.0 0.0 20544 792 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 67798 0.0 0.1 20552 1588 ? S 22:07 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 67799 0.0 0.1 21004 1572 ? S 22:07 0:00 nginx: worker process
[root@web3 nginx-1.16.1]# mv /usr/local/nginx/sbin/{nginx.old,nginx}
[root@web3 nginx-1.16.1]# ps aux|grep nginx
root 22307 0.0 0.0 112708 984 pts/0 R+ 23:39 0:00 grep --color=auto nginx
root 51891 0.0 0.0 20544 792 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 67798 0.0 0.1 20552 1588 ? S 22:07 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 67799 0.0 0.1 21004 1572 ? S 22:07 0:00 nginx: worker process
[root@web3 nginx-1.16.1]# kill -USR2 51891
[root@web3 nginx-1.16.1]# kill -9 67799
[root@web3 nginx-1.16.1]# ps aux|grep nginx
nginx 23560 1.1 0.1 21004 1328 ? S 23:40 0:00 nginx: worker process
root 23638 0.0 0.0 112708 984 pts/0 R+ 23:41 0:00 grep --color=auto nginx
root 51891 0.0 0.0 20544 792 ? Ss 21:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 67798 0.0 0.1 20552 1588 ? S 22:07 0:00 nginx: master process /usr/local/nginx/sbin/nginx
[root@web3 nginx-1.16.1]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.14.2

nginx之热部署,以及版本回滚的更多相关文章

  1. 用Helm部署Kubernetes应用,支持多环境部署与版本回滚

    1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...

  2. Nginx 版本回滚

    目录 参考信息 源码安装 nginx-1.14.2 版本升级 nginx-1.16.1 版本回滚 ①.对于软件的版本升级.添加官方模块.添加第三方模块,都需要用源码安装包重新生成(configure) ...

  3. nginx使用热部署添加新模块

    简介 当初次编译安装nginx时,http_ssl_module 模块默认是不编译进nginx的二进制文件当中,如果需要添加 ssl 证书.也就是使用 https协议.那么则需要添加 http_ssl ...

  4. TortoiseSVN 版本回滚

    尝试用TortoiseSVN进行版本回滚,回滚到的版本和实际的内容有出入,可能是点了太多次给点乱了,囧~ 不过发现一个比较靠谱的方法,如下: 右键点击文件TortoiseSVN->showlog ...

  5. svn 日志版本回滚

    [root@v01 online]# svn diff -r 9:8 Index: index.html =============================================== ...

  6. git---远程仓库版本回滚

    开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...

  7. SVN系列之—-SVN版本回滚的办法

    例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...

  8. SVN版本回滚实战

    天在使用SVN发布的时候不小心修改了一些不正确的东西,新增和编辑了一些错误的文件,由于文件数量比较多,并且目录复杂,不可能单个进行处理,所以想到了SVN版本回滚. 回滚本地工作目录: 1.右键工作目录 ...

  9. git版本回滚

    本地版本回滚 git reset --hard <版本号> (git log 可查看版本号,版本号不用写全) 远程仓库版本回滚 先在本地将版本回滚 ,然后git push -f 强制提交

随机推荐

  1. 搭建Ambari 2.6.0 tar 解压缩报错

    背景:我们使用的方式不是wget 去下载ambari的源码包,而是在windows 的 firefox 下直接下载,将文件存储到本地. 执行 tar -zxvf HDP-2.6.3.0-centos7 ...

  2. @清晰掉 swap函数

    swap函数估计是一个各种各样程序都会频繁用到的子程序,可是你知道它究竟有多少种不同的写法吗?下面我就列举我知道的几种swap函数来跟大家分享一下. (1)经典型---嫁衣法 无论是写程序还是干其他事 ...

  3. wxs 及 获取节点 和 网络请求

    wxs:微信小程序脚本语言,结合 wxml 可以构建页面的结构 在 wxml 中使用 wxs wxs 中的注释 : 单行注释:// 多行注释:/* */ wxs 在页面中的用法 在页面中引用 wxs ...

  4. HDU6534 Chika and Friendly Pairs(莫队,树状数组)

    HDU6534 Chika and Friendly Pairs 莫队,树状数组的简单题 #include<bits/stdc++.h> using namespace std; cons ...

  5. C语言字符数组详解

    字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对这些字符进行存储,即通过字符数组存储.字符数 ...

  6. 【IOS打包】ARCHIVE FAILED:Command CodeSign failed with a nonzero exit code

    [问题] [解决办法] 用xcode打开项目 command + k 重启电脑 参照:xcode打包报错command codesign failed with a nonzero exit code ...

  7. delphi 跨版本DLL调用嵌入窗体实现

    delphi 能实现把别的DLL的窗体句柄查到后,贴到PANL之中,此类文章网上不少,而如果是delphi不同版本开发的DLL互调时,一些控件内部的定义有所区别,因为无法(至少目前我觉得理论上不可行) ...

  8. spring boot加载自定义配置

    1.通过@Value 配置文件中 wechat: ssh: host: 192.0.1.1 port: 22 加载类 @Component @Data public class SftpConfig ...

  9. 2.k8s.Pod生命周期,健康检查

    #Pod生命周期,健康检查 pod创建过程 Init容器 就绪探测 存活探测 生命周期钩子 #Pod创建过程 master节点:kubectl -> kube-api -> kubenle ...

  10. nginx重要特性

    反向代理负载均衡实现高并发 1.反向代理反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果返回给 ...