nginx的平滑升级

摘要:
1: 解释一下nginx的流畅升级越来越受nginx欢迎,nginx优势也越来越明显。nginx的版本迭代也加快了模式的速度。nginx的1.9.0版本更新了许多新功能,例如流四层代理功能。随着nginx的广泛应用,版本升级必须越来越快,在线业务无法停止,此时,nginx升级就是运维工作。Nginx方便地帮助我们顺利升级。有两种情况需要升级Nginx。一个是升级Nginx的版本,另一个是向Nginx添加新模块。

一:解释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

nginx的平滑升级第1张

现在我们 需要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的平滑升级第2张

免责声明:文章转载自《nginx的平滑升级》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux常用性能检测命令Ubuntu Error: No module named 'apt_pkg' 怎么办?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS上安装比较习惯的代码编辑器

linux下的vim用起来不是很习惯,可能是能力有限。所以一直在找一种自己比较熟悉的代码编辑器,所以就找到了sublime text,安装方法网上有很多种,比较方便的方法:直接在csdn上下载一个破解版的,链接为: http://download.csdn.net/download/phpscott2/5356561 安装后,能够运行,但每次打开都提示没有...

eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7

  1、次方法用于没有一点提示的情况:依次打开eclipse上面的windows ——preferences ——java ——editor —— content assist ,在右上方有一行“select the proposal kinds contained in the 'default' content assist list” 下面,勾选Ja...

GitLab搭建详细过程

一、前提 系统:Centos 6.5 软件版本:gitlab-7.8.4 Selinux:关闭 防火墙规则:先清空(搭建好了后续自己添加相关放行规则) 二、yum源配置和相关依赖包 1.添加epel源和PUIAS_6_computational源 1 # yum -y install epel-release 创建该文件并添加以下内容: 1...

Docker学习以及镜像制作流程

一、何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能...

nginx配置使用

nginx 安装(阿里云服务器)   1,nginx 安装 yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ yum install -y lrzsz cd /usr/local/src wget ftp://ftp.csx.cam.ac.uk/pub/sof...

CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备

分享一下Rocky版本的OpenStack安装管理经验: OpenStack每半年左右更新一版,目前是版本是201808月发布的版本-R版(Rocky),目前版本安装方法优化较好,不过依然是比较复杂 官方文档地址:https://docs.openstack.org/install-guide/openstack-services.html 本文主要分享控...