zoukankan      html  css  js  c++  java
  • 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

    现在我们 需要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是否升级成功

  • 相关阅读:
    项目冲刺-第一天
    第四次个人作业-关于微软必应词典客户端 的案例分析
    第三次作业-结对编程
    学院教师开课管理网站项目
    使用Git进行代码管理的心得--github for windows
    十天冲刺---Day8
    十天冲刺---Day7
    十天冲刺---Day6
    十天冲刺---Day5
    十天冲刺---Day4
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/6937453.html
Copyright © 2011-2022 走看看