1、概述(可以直接跳过看第2部分)

Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:

(1)在不停掉老进程的情况下,启动新进程。

(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。

(3)新进程接受新请求。

(4)老进程处理完所有请求,关闭所有连接后,停止。

这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。

2. 升级过程

具体的操作也很简单,如下:

(0)查看当前版本

在存放Nginx的可执行文件的目录下输入:

  1. ./nginx -V

(1)下载新的Nginx版本并编译。

  1. wget nginx-1.0.11.tar.gz
  2. tar zxvf nginx-1.0.11.tar.gz
  3. cd nginx-1.0.11
  4. ./configure --add-module=/customized_module_0 --add-module=/customized_module_1
  5. make

注意不要进行make install

(2)备份老版本的可执行文件

  1. cd /usr/local/nginx/sbin
  2. sudo cp nginx nginx.old

(3)修改配置文件

如果有必要的话,进行配置文件的修改。

(4)拷贝新的可执行文件

  1. sudo cp /home/michael/tmp/nginx-1.0.11/objs/nginx /usr/local/nginx/sbin/

(5)升级

  1. cd /home/michael/tmp/nginx-1.0.11
  2. make upgrade

(6)清理多余文件

  1. rm -rf /home/michael/tmp/nginx-1.0.11

(7)查看Nginx版本

  1. cd /usr/local/nginx/sbin
  2. ./nginx -V

3、观察进程变化

在我的机器上可以观察到,我配置的是10个worker进程,启动后观察到:

  1. root      6241 10419  0 10:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
  2. nobody    6242  6241  2 10:51 ?        00:00:00 nginx: worker process
  3. nobody    6243  6241  0 10:51 ?        00:00:00 nginx: worker process
  4. nobody    6244  6241  0 10:51 ?        00:00:00 nginx: worker process
  5. nobody    6245  6241  0 10:51 ?        00:00:00 nginx: worker process
  6. nobody    6246  6241  0 10:51 ?        00:00:00 nginx: worker process
  7. nobody    6247  6241  0 10:51 ?        00:00:00 nginx: worker process
  8. nobody    6248  6241  0 10:51 ?        00:00:00 nginx: worker process
  9. nobody    6249  6241  0 10:51 ?        00:00:00 nginx: worker process
  10. nobody    6250  6241  0 10:51 ?        00:00:00 nginx: worker process
  11. nobody    6251  6241  1 10:51 ?        00:00:00 nginx: worker process
  12. nobody    6252  6241  0 10:51 ?        00:00:00 nginx: cache manager process
  13. nobody    6253  6241  0 10:51 ?        00:00:00 nginx: cache loader process
  14. luming    6310 25051  0 10:51 pts/1    00:00:00 grep --color=auto nginx
  15. nobody    7995 10419  0 Jan12 ?        00:20:37 nginx: worker process is shutting down
  16. nobody    7996 10419  0 Jan12 ?        00:20:11 nginx: worker process is shutting down
  17. nobody    7998 10419  0 Jan12 ?        00:20:04 nginx: worker process is shutting down
  18. nobody    8003 10419  0 Jan12 ?        00:20:12 nginx: worker process is shutting down
  19. root     10419     1  0 Jan08 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

可见新的进程有1个master和10个worker,另外还有1个老的master(可以从时间上看出)和4个worker(其他6个老的worker已经处理完所有连接而shutdown了)。还有一个loader进程。过几秒种可以看到worker只有两个了:

  1. root      6241 10419  0 10:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
  2. nobody    6242  6241  1 10:51 ?        00:00:00 nginx: worker process
  3. nobody    6243  6241  0 10:51 ?        00:00:00 nginx: worker process
  4. nobody    6244  6241  0 10:51 ?        00:00:00 nginx: worker process
  5. nobody    6245  6241  0 10:51 ?        00:00:00 nginx: worker process
  6. nobody    6246  6241  0 10:51 ?        00:00:00 nginx: worker process
  7. nobody    6247  6241  0 10:51 ?        00:00:00 nginx: worker process
  8. nobody    6248  6241  0 10:51 ?        00:00:00 nginx: worker process
  9. nobody    6249  6241  0 10:51 ?        00:00:00 nginx: worker process
  10. nobody    6250  6241  0 10:51 ?        00:00:00 nginx: worker process
  11. nobody    6251  6241  0 10:51 ?        00:00:00 nginx: worker process
  12. nobody    6252  6241  0 10:51 ?        00:00:00 nginx: cache manager process
  13. nobody    6253  6241  0 10:51 ?        00:00:00 nginx: cache loader process
  14. luming    6430 25051  0 10:51 pts/1    00:00:00 grep --color=auto nginx
  15. nobody    7996 10419  0 Jan12 ?        00:20:11 nginx: worker process is shutting down
  16. nobody    8003 10419  0 Jan12 ?        00:20:12 nginx: worker process is shutting down
  17. root     10419     1  0 Jan08 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

再过一小会儿观察:

  1. root      6241     1  0 10:51 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
  2. nobody    6242  6241  0 10:51 ?        00:00:01 nginx: worker process
  3. nobody    6243  6241  0 10:51 ?        00:00:01 nginx: worker process
  4. nobody    6244  6241  0 10:51 ?        00:00:01 nginx: worker process
  5. nobody    6245  6241  0 10:51 ?        00:00:00 nginx: worker process
  6. nobody    6246  6241  0 10:51 ?        00:00:00 nginx: worker process
  7. nobody    6247  6241  0 10:51 ?        00:00:00 nginx: worker process
  8. nobody    6248  6241  0 10:51 ?        00:00:00 nginx: worker process
  9. nobody    6249  6241  0 10:51 ?        00:00:00 nginx: worker process
  10. nobody    6250  6241  0 10:51 ?        00:00:01 nginx: worker process
  11. nobody    6251  6241  0 10:51 ?        00:00:02 nginx: worker process
  12. nobody    6252  6241  0 10:51 ?        00:00:00 nginx: cache manager process
  13. luming    8680 25051  0 10:56 pts/1    00:00:00 grep --color=auto nginx

Congratulations! You can upgrade your Nginx server gracefully.

平滑升级你的Nginx的更多相关文章

  1. 高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx

    1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...

  2. 原创|1分钟搞定 Nginx 版本的平滑升级与回滚

    Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...

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

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

  4. Nginx在线服务状态下平滑升级或新增模块的详细操作

    今天应开发的需求,需要在Nginx增加一个模块,并不能影响现有的业务,所以就必须要平滑升级Nginx,好了,不多说了 1:查看现有的nginx编译参数 /usr/local/nginx/sbin/ng ...

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

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

  6. nginx 平滑升级tengine

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

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

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

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

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

  9. Nginx的平滑重启和平滑升级

    一,Nginx的平滑重启如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,可以发送系统信号给Nginx主进程的方式来进行.在重启之前,要确认Nginx配置文件的语法是正确的. ...

随机推荐

  1. 如何判断DataSet里有多少个DataTable

    dataset.table.count sda.fill(ds,"table"); //这里是在ds里新建了一个表,叫table,注意是新建,多次执行会报错,实际使用时,可以用co ...

  2. 带着新人学springboot的应用09(springboot+异步任务)

    本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...

  3. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  4. angr进阶(4)从任意位置开始

    从程序的任意位置开始可以大大的减少测试的时间,使用的方法是控制程序运行到某时刻的寄存器的值来进行的.asisctffinals2015_fake p = angr.Project("fake ...

  5. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增模块管理界面导出功能(可按条件导出)

    导出功能在很多应用场景中都需要,RDIFramework.NET V3.2版本在模块管理界面新增了导出功能,方便管理员对所有配置的模块进行管理. 一.Web版模块管理导出功能 Web版本的模块导出功能 ...

  6. 初识区块链——用JS构建你自己的区块链

    前言 区块链太复杂,那我们就讲点简单的.用JS来构建你自己的区块链系统,寥寥几行代码就可以说明区块链的底层数据结构.POW挖矿思想和交易过程等.当然了,真实的场景远远远比这复杂.本文的目的仅限于让大家 ...

  7. [ Java面试题 ]JavaWeb篇

    1.说一说Servlet的生命周期? Servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init(),se ...

  8. Python机器学习笔记 使用scikit-learn工具进行PCA降维

    之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...

  9. 如何热更新线上的Java服务器代码

    一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的 ...

  10. Tomcat常用的过滤器

    前言 之前我很肤浅的以为为了实现某种请求过滤功能(比如图片转换.文件上传.安全认证等),都需要自己去实现javax.servlet.Filter.之后在web.xml中配置即可. 但事实上,Tomca ...