平滑升级你的Nginx
1、概述(可以直接跳过看第2部分)
Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块。
2. 升级过程
具体的操作也很简单,如下:
(0)查看当前版本
在存放Nginx的可执行文件的目录下输入:
- ./nginx -V
(1)下载新的Nginx版本并编译。
- wget nginx-1.0.11.tar.gz
- tar zxvf nginx-1.0.11.tar.gz
- cd nginx-1.0.11
- ./configure --add-module=/customized_module_0 --add-module=/customized_module_1
- make
注意不要进行make install
(2)备份老版本的可执行文件
- cd /usr/local/nginx/sbin
- sudo cp nginx nginx.old
(3)修改配置文件
如果有必要的话,进行配置文件的修改。
(4)拷贝新的可执行文件
- sudo cp /home/michael/tmp/nginx-1.0.11/objs/nginx /usr/local/nginx/sbin/
(5)升级
- cd /home/michael/tmp/nginx-1.0.11
- make upgrade
(6)清理多余文件
- rm -rf /home/michael/tmp/nginx-1.0.11
(7)查看Nginx版本
- cd /usr/local/nginx/sbin
- ./nginx -V
3、观察进程变化
在我的机器上可以观察到,我配置的是10个worker进程,启动后观察到:
- root 6241 10419 0 10:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
- nobody 6242 6241 2 10:51 ? 00:00:00 nginx: worker process
- nobody 6243 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6244 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6245 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6246 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6247 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6248 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6249 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6250 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6251 6241 1 10:51 ? 00:00:00 nginx: worker process
- nobody 6252 6241 0 10:51 ? 00:00:00 nginx: cache manager process
- nobody 6253 6241 0 10:51 ? 00:00:00 nginx: cache loader process
- luming 6310 25051 0 10:51 pts/1 00:00:00 grep --color=auto nginx
- nobody 7995 10419 0 Jan12 ? 00:20:37 nginx: worker process is shutting down
- nobody 7996 10419 0 Jan12 ? 00:20:11 nginx: worker process is shutting down
- nobody 7998 10419 0 Jan12 ? 00:20:04 nginx: worker process is shutting down
- nobody 8003 10419 0 Jan12 ? 00:20:12 nginx: worker process is shutting down
- 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只有两个了:
- root 6241 10419 0 10:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
- nobody 6242 6241 1 10:51 ? 00:00:00 nginx: worker process
- nobody 6243 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6244 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6245 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6246 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6247 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6248 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6249 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6250 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6251 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6252 6241 0 10:51 ? 00:00:00 nginx: cache manager process
- nobody 6253 6241 0 10:51 ? 00:00:00 nginx: cache loader process
- luming 6430 25051 0 10:51 pts/1 00:00:00 grep --color=auto nginx
- nobody 7996 10419 0 Jan12 ? 00:20:11 nginx: worker process is shutting down
- nobody 8003 10419 0 Jan12 ? 00:20:12 nginx: worker process is shutting down
- root 10419 1 0 Jan08 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
再过一小会儿观察:
- root 6241 1 0 10:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
- nobody 6242 6241 0 10:51 ? 00:00:01 nginx: worker process
- nobody 6243 6241 0 10:51 ? 00:00:01 nginx: worker process
- nobody 6244 6241 0 10:51 ? 00:00:01 nginx: worker process
- nobody 6245 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6246 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6247 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6248 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6249 6241 0 10:51 ? 00:00:00 nginx: worker process
- nobody 6250 6241 0 10:51 ? 00:00:01 nginx: worker process
- nobody 6251 6241 0 10:51 ? 00:00:02 nginx: worker process
- nobody 6252 6241 0 10:51 ? 00:00:00 nginx: cache manager process
- luming 8680 25051 0 10:56 pts/1 00:00:00 grep --color=auto nginx
Congratulations! You can upgrade your Nginx server gracefully.
平滑升级你的Nginx的更多相关文章
- 高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx
1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...
- 原创|1分钟搞定 Nginx 版本的平滑升级与回滚
Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...
- nginx的平滑升级,不间断服务
nginx的平滑升级,不间断服务 Nginx更新真的很快,最近nginx的1.0.5稳定版,nginx的0.8.55和nginx的0.7.69旧的稳定版本已经发布.我一项比较喜欢使用新版本的软件, ...
- Nginx在线服务状态下平滑升级或新增模块的详细操作
今天应开发的需求,需要在Nginx增加一个模块,并不能影响现有的业务,所以就必须要平滑升级Nginx,好了,不多说了 1:查看现有的nginx编译参数 /usr/local/nginx/sbin/ng ...
- 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...
- nginx 平滑升级tengine
wget http://tengine.taobao.org/download/tengine-1.5.1.tar.gz //下载Tengine1.5.1版本 tar zxvf tengine-1. ...
- 源码安装nginx以及平滑升级
源码安装nginx以及平滑升级 ...
- nginx平滑重启与平滑升级的方法
如何实现nginx平滑重启与平滑升级? 平滑重启 kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid` 平滑升级nginx: cd /yujialin ...
- Nginx的平滑重启和平滑升级
一,Nginx的平滑重启如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,可以发送系统信号给Nginx主进程的方式来进行.在重启之前,要确认Nginx配置文件的语法是正确的. ...
随机推荐
- redis 系列27 Cluster高可用 (2)
一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可以会出现该槽中的一部分键值对保存在源节点 ...
- [工具]PyCharm激活、注册码无效解决办法
前言 我是个 Pythoner,开发工具一直使用的 JetBrains 的 PyCharm.我师傅告诉过我:一个程序员一定要有一个用的很 6 的 IDE,你的开发效率会提高很多,很多... 我从小白的 ...
- oracle数据库之plsql可视化操作建表
首先登录PL/SQL developer. 点击工具栏中的第一个图标,选择“表”. 右边会弹出一个窗口,我们以可视化方式来创建一个Table. 如下图所示,在“一般”选项卡中,输入“名称” ...
- [Leetcode]112. Path Sum -David_Lin
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- Flow 常用知识点整理
Flow入门初识 Flow是facebook出品的JavaScript静态类型检查工具. 由于JavaScript是动态类型语言,它的灵活性也会造成一些代码隐患,使用Flow可以在编译期尽早发现由类型 ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(2)- 界面构建(wxFormBuilder3.8.0)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之界面构建. 一个软件的UI界面是非常重要的,这是软件与用户交互的接口,软件功能即使再强大,但如果没 ...
- 解析JavaScrip之对象属性
对于面向对象编程语言(如java,.net,php,python等)来说,其最大的特点在于“面向对象”,而"面向对象"较为显著的特征便是:封装,继承,多态.借助”面向对象“的这些特 ...
- [Go] golang类型断言
类型断言有点像向下转型,接口类型转到具体的实现实例类型上类型断言是一个使用在接口值上的操作.语法上它看起来像x.(T)被称为断言类型,这里x表示一个接口的类型和T表示一个类型 package main ...
- C# /VB.NET操作Word批注(一)—— 插入、修改、删除Word批注
批注内容可以是对某段文字或内容的注释,也可以是对文段中心思想的概括提要,或者是对文章内容的评判.疑问,以及在阅读时给自己或他人起到提示作用.本篇文章中将介绍如何在C#中操作Word批注,主要包含以下要 ...
- Java开发笔记(十四)几种运算符的优先级顺序
到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...