nginx之热部署,以及版本回滚
热部署的概念:当从老版本替换为新版本的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之热部署,以及版本回滚的更多相关文章
- 用Helm部署Kubernetes应用,支持多环境部署与版本回滚
1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...
- Nginx 版本回滚
目录 参考信息 源码安装 nginx-1.14.2 版本升级 nginx-1.16.1 版本回滚 ①.对于软件的版本升级.添加官方模块.添加第三方模块,都需要用源码安装包重新生成(configure) ...
- nginx使用热部署添加新模块
简介 当初次编译安装nginx时,http_ssl_module 模块默认是不编译进nginx的二进制文件当中,如果需要添加 ssl 证书.也就是使用 https协议.那么则需要添加 http_ssl ...
- TortoiseSVN 版本回滚
尝试用TortoiseSVN进行版本回滚,回滚到的版本和实际的内容有出入,可能是点了太多次给点乱了,囧~ 不过发现一个比较靠谱的方法,如下: 右键点击文件TortoiseSVN->showlog ...
- svn 日志版本回滚
[root@v01 online]# svn diff -r 9:8 Index: index.html =============================================== ...
- git---远程仓库版本回滚
开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...
- SVN系列之—-SVN版本回滚的办法
例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...
- SVN版本回滚实战
天在使用SVN发布的时候不小心修改了一些不正确的东西,新增和编辑了一些错误的文件,由于文件数量比较多,并且目录复杂,不可能单个进行处理,所以想到了SVN版本回滚. 回滚本地工作目录: 1.右键工作目录 ...
- git版本回滚
本地版本回滚 git reset --hard <版本号> (git log 可查看版本号,版本号不用写全) 远程仓库版本回滚 先在本地将版本回滚 ,然后git push -f 强制提交
随机推荐
- SQL中的schema()函数可替代database()
- 配置 Hive On Tez
配置 Hive On Tez 标签(空格分隔): hive Tez 部署底层应用 简单介绍 介绍:tez 是基于hive 之上,可以将sql翻译解析成DAG计算的引擎.基于DAG 与mr 架构本身的优 ...
- 5-1 Django的路由层(urlconf)
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...
- 20175308 实验三《敏捷开发与XP实践》
20175308 实验三<敏捷开发与XP实践> 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰写实验 ...
- HDU 6625 (01字典树)
题意:给定两个长为n的数组a和b:重新排列a和b,生成数组c,c[i]=a[i] xor b[i]:输出字典序最小的c数组. 分析:将a中的数插入一颗01字典树a中:将b中的数插入一颗01字典树b中: ...
- C#读取word文档中的内容
原文地址 http://blog.csdn.net/yhrun/article/details/7674540 在使用前需要添加引用巨硬的com组件:Microsoft Word 12.0 objec ...
- oracle备份和还原
用exp命令即可完成,但要看具体的备份方式. 1. 导出一个完整数据库 exp system/manager file=bible_db log=dible_db full=y 2. 导出数据库定义而 ...
- 关于ajax请求controller返回中文乱码的解决方法!
问题描述:前台ajax请求 Spring框架的 controller 返回的本应该是一段中文字符串 ,结果返回了一串 ?????? 解决办法:在RequestMapping的属性中添加返回数据类型属性 ...
- 应用安全 - 无文件式攻击 - 潜伏型攻击 - MBR - 汇总 (2019-11-29 15:57)
Petya勒索病毒 Date
- 【Linux开发】将cmd中命令输出保存为TXT文本文件
将cmd中命令输出保存为TXT文本文件 在网上看到一篇名为:"[转载]如何将cmd中命令输出保存为TXT文本文件" 例如:将Ping命令的加长包输出到D盘的ping.txt文本文件 ...