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.

高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx的更多相关文章

  1. 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式

    通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...

  2. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  3. 高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景

    一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发 ...

  4. 高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“Hello World”

    1. Nginx 程序包 目前最新的开发版本时1.1.12: Linux/Unix:nginx-1.1.12.tar.gz Windows:nginx-1.1.12.zip 我们可以下载稳定版尝试: ...

  5. 高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例

    概述 从这篇博文起,将带领读者们一起领略Nginx的强大. Nginx 是做什么用的?我相信很多朋友都已经使用过,如果你没有,那么你一定知道以下这些名称之一:Apache,Lighttpd,Tomca ...

  6. 高性能Web服务器Nginx的配置与部署研究(3)Nginx请求处理机制

    1. 处理什么样的请求 处理访问到 Nginx 所在 IP 地址的请求,并且这些请求的 HTTP 头信息中的 Host 为所要处理的域名(如下以80端口为例),如下几个 server 就对应响应的请求 ...

  7. 高性能Web服务器Nginx的配置与部署研究(4)Nginx常用命令

    1. 启动 Nginx poechant@ubuntu:sudo ./sbin/nginx 2. 停止 Nginx poechant@ubuntu:sudo ./sbin/nginx -s stop ...

  8. 高性能Web服务器Nginx的配置与部署研究(8)核心模块之事件模块

    一.事件模块的作用是什么? 用来设置Nginx处理链接请求. 二.相关指令 1. accept_mutex 含义:设置是否使用连接互斥锁进行顺序的accept()系统调用. 语法:accept_mut ...

  9. 高性能Web服务器Nginx的配置与部署研究系列(1)-- 入门 hello work

    简介: Nginx 是一个基于 BSD-like 协议.开源.高性能.轻量级的HTTP服务器.反向代理服务器以及电子邮件(SMTP.POP3.IMAP)服务器.Nginx 是由一个俄罗斯的名叫“Igo ...

随机推荐

  1. Falcon

    1. JE falcon还需要安装je用来处理jdbc,否则打不开falcon的页面,爆内部错误503,然后看异常信息:Caused by: org.apache.falcon.FalconExcep ...

  2. CentOS yum源设定使用方法的整理(转)

    CentOS yum更新了很多版本更新,我本人认为CentOS yum很好使的文件系统,在此向大家推荐CentOS应该是做为服务器的linux的佼佼者.CentOS采用的二进制包是rpm,不过包的依赖 ...

  3. Sqlite基础简介

    1.什么是SQLite ? -> SQLite简介 SQLite 是一个进程内的库,是一种轻量级的.自给自足的.无服务器的.无需配置的,事务性的SQL数据库引擎.和他其他的数据库一样,SQLit ...

  4. 使用Octave分析GNU Radio的数据

    Octave 是 GNU Radio 的最流行的分析工具,因此 GNU Radio 软件包也包含它自身的一组脚本用于读取和语法分析输出.本文介绍如何使用 Octave 分析 GNU Radio 产生的 ...

  5. matlab读写图片,读取图像序列,读取AVI视频

    介绍使用matlab读写图片,读取图像序列,读取AVI视频的方法: 一.读写图像 使用matlab读一幅图像,并另存 % Filename: ImageReadWrite clc; clear; i ...

  6. C/S模式与B/S模式的详细介绍

    网络程序开发的两种计算模式--C/S模式与B/S模式.两种各有千秋,用于不同场合. C/S适用于专人使用,安全性要求较高的系统: B/S适用于交互性比较频繁的场合,容易被人们所接受,倍受用户和软件开发 ...

  7. appium+python自动化40-adb offline(5037端口被占)

    前言 adb连手机的时候经常会出现offline的情况,一般杀掉adb,然后重启adb可以解决. 如果发现不管怎么重启adb都连不上,一直出现offlie的情况,这个时候很大可能就是adb的5037端 ...

  8. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式

    mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式 示例:分隔符一致,年月日要用%号 select str_to_date('2008-4-2 15:3:28', ...

  9. MySQL添加数据库的唯一索引的几种方式~

    创建表时直接设置: DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (  `stu_id` int(11) NOT NULL AUTO_IN ...

  10. 记一次爬需要登录之后才能爬取数据的demo

    一:工程概况 注意: 二:涉及到的类 package com.bigdata.crawler; import java.io.IOException; import java.util.List; i ...