一:解释nginx的平滑升级

随着nginx越来越流行,并且nginx的优势也越来越明显,nginx的版本迭代也来时加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理功能,伴随着nginx的广泛应用,版本升级必然越来越快,线上业务不能停,此时nginx的升级就是运维的工作了

Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。

二.nginx平滑升级的原理:

多进程模式下的请求分配方式

nginx默认工作在多进程模式下,即主进程启动完成配置加载和端口绑定等动作 ,fork出指定数量的工作进程,这些子进程会持有监听端口文件描述符(fd)并通过在该描述上添加监听事件来接受连接(accept)

信号的接受和处理

nginx主进程在启动完成后进入等待状态,负载相应各类系统消息,如SIGCHLD,SIGHUP.SIGUSR2等

nginx信号简介

主进程支持的信号

TERM,INT:立刻退出

QUIT:等待工作进程结束在提出,

KILL:强子终止进程

HUP:重新加载配置文件,使用新的的配置启动工作进程,并逐步关闭日进程

USR1:重新打开日志文件

USR2:启动新的主进程,实现热升级

WINCH:逐步关闭工作进程

工作进程支持的信号:

TERM,INT:立刻退出

QUIT:等待请求处理结束后再退出

USR1:重新打开日志文件

[root@Centos ~]# yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel

[root@Centos ~]# tar zxvf nginx-1.6.0.tar.gz -C /usr/src/

[root@Centos ~]# cd /usr/src/nginx-1.6.0/
[root@Centos nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

[root@Centos nginx-1.6.0]# make

[root@Centos nginx-1.6.0]# make install

[root@Centos nginx-1.6.0]# ln -s /usr/local/nginx/sbin/* /usr/sbin/
[root@Centos nginx-1.6.0]# useradd -M -s /sbin/nologin nginx 
[root@Centos nginx-1.6.0]# nginx 
[root@Centos nginx-1.6.0]# netstat -anput | grep nginx 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19008/nginx: master

目前版本是1.6.0

[root@Centos nginx-1.6.0]# nginx -v
nginx version: nginx/1.6.0

目前版本是1.6.0且只有一个模块,该模式支持nginx状态查询,
[root@Centos nginx-1.6.0]# nginx -V
nginx version: nginx/1.6.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

[root@Centos nginx-1.6.0]# echo "nginx1.6.0" > /usr/local/nginx/html/index.html

[root@Centos nginx-1.6.0]# elinks 192.168.20.167

现在我们 需要jiangnginx版本进行升级 并在不影响业务的情况下添加SSL和pcre模块

[root@Centos ~]# tar zxvf nginx-1.11.2.tar.gz -C /usr/src/

[root@Centos ~]# cd /usr/src/nginx-1.11.2/
[root@Centos nginx-1.11.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=ngiinx --with-http_stub_status_module --with-http_ssl_module --with-pcre

[root@Centos nginx-1.11.2]# make

[root@Centos nginx-1.11.2]# cd
[root@Centos ~]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old 
[root@Centos ~]# cp /usr/src/nginx-1.11.2/objs/nginx /usr/local/nginx/sbin/

[root@Centos ~]# mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.old[root@Centos ~]# cp /usr/src/nginx-1.11.2/conf/nginx.conf /usr/local/nginx/conf/nginx.conf

[root@Centos ~]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
[root@Centos ~]# ls /usr/local/nginx/logs/
access.log error.log nginx.pid

[root@Centos ~]# ps aux | grep nginx 
root 19008 0.0 0.0 24324 944 ? Ss 14:07 0:00 nginx: master process nginx
nginx 19009 0.0 0.1 26832 1744 ? S 14:07 0:00 nginx: worker process
root 53194 0.0 0.0 112660 976 pts/0 R+ 14:36 0:00 grep --color=auto ngin

验证nginx是否升级成功

nginx的平滑升级的更多相关文章

  1. 源码安装nginx以及平滑升级

                                                           源码安装nginx以及平滑升级                               ...

  2. nginx的平滑升级,不间断服务

    nginx的平滑升级,不间断服务   Nginx更新真的很快,最近nginx的1.0.5稳定版,nginx的0.8.55和nginx的0.7.69旧的稳定版本已经发布.我一项比较喜欢使用新版本的软件, ...

  3. Nginx的平滑升级记录---适用于编译安装的Nginx

    一.查看自己的Nginx的版本号 [root@localhost sbin]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ls nginx [r ...

  4. nginx不间断服务平滑升级

    (1)备份旧的nginx和配置文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx #备份旧版程序 cp /usr/loc ...

  5. Nginx版本平滑升级方案

    背景:由于负载均衡测试服务器中nginx版本过低,存在安全漏洞,查询相关修复漏洞资料,需要采取nginx版本升级形式对漏洞进行修复. Nginx平滑升级方案 1.案例采用版本介绍 旧版本 nginx- ...

  6. 对nginx进行平滑升级

    1.查看服务器当前nginx版本 [root@instance-hwl9ix5l licenses]# nginx -v           #查看版本 nginx: nginx version: n ...

  7. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

    为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...

  8. nginx 平滑升级tengine

    wget  http://tengine.taobao.org/download/tengine-1.5.1.tar.gz //下载Tengine1.5.1版本 tar zxvf tengine-1. ...

  9. nginx平滑重启与平滑升级的方法

    如何实现nginx平滑重启与平滑升级? 平滑重启 kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid` 平滑升级nginx: cd /yujialin ...

随机推荐

  1. 关于MATLAB处理大数据坐标文件2017527

    第一次提交数据: 今天用了8个特征,加上的这一个特征是 从3000条测试数据中测试失败的数据总结出来的树的数目为50再次使用3000条测试数据测试结果-- 结果不错: 99%但是运行官网数据结果分数- ...

  2. (cljs/run-at (JSVM. :browser) "搭建刚好可用的开发环境!")

    前言  书接上一回,在了解cljs基本语法后并在clojurescript.net的奇特错误提示后,我们必须痛定思痛地搭建一个本地的开发环境,以便后续深入地学习cljs. 现有的构建工具  由于浏览器 ...

  3. memcache与mysql的连接

    MySQL官方在5.6版本以上有一个与memcache连接的插件,名字叫做innodb_memcache. 1),没有安装过MySQL的,可以在CMAKE的时候加入:-DWITH_INNODB_MEM ...

  4. cache 和 buffer的区别

    cache 和 buffer的区别: Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器.由于CPU的速度远高于主内存, CPU直接从内存中存取数据要等待一定时间周期,Cac ...

  5. 【LeetCode】91. Decode Ways

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  6. 【Android Developers Training】 20. 创建一个Fragment

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. JavaScript函数部分

    函数部分学习:+parseInt(): -parseInt()函数将其收到的任何输入值(通常是字符串)转换成整数类型输出,如果转换失败就返回NaN. -parseInt(“参数”,第二参数基数):没有 ...

  8. php如何上传txt文件,并且读取txt文件

    1.创建目录如下

  9. JS综合练习

    练习一.任意数求和(最多输入十位数),输入999终止 运行代码 <!DOCTYPE html><html> <head> <meta charset=&quo ...

  10. 初学spring boot踩过的坑

    一.搭建spring boot环境 maven工程 pom文件内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...