Linux99学习论坛-linux论坛|Linux系统论坛

 找回密码
 注册
搜索
查看: 597|回复: 0

Nginx的“安静”升级

[复制链接]

91

主题

0

好友

411

积分

管理员

Rank: 9Rank: 9Rank: 9

金钱
317
主题
91
发表于 2012-5-24 13:51:03 |显示全部楼层
步骤如下:
1)Nginx的旧版本的安装。(线上的服务器应该先已经安装Nginx的比较旧的版本)
#  nginx -v  
  • nginx version: nginx/0.7.69
    3)使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译安装到旧版本的Nginx安装路径中,替换之前,您最好备份一下旧的可执行文件。

      # cp /usr/local/sbin/nginx ~/  
    • # tar zxf nginx-1.3.0.tar.gz  
      # cd nginx-1.3.0  
    • # ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module
    • # make && make install
    4)查看一下当前的主进程号是多少,然后执行命令:kill -USR2 旧的版本的Nginx主进程号   。

      # ps -ef | grep nginx  
    • root     21421     1  0 20:37 ?        00:00:00 nginx: master process nginx  
      nobody   24021 21421  0 20:49 ?        00:00:00 nginx: worker process  
    • root     28765 24076  0 22:04 pts/1    00:00:00 grep nginx  
    • # kill -USR2 21421
    5)旧的版本Nginx的主进程将重命名它的.pid文件为.oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。

      # /usr/local/sbin/nginx  
    • # ps -ef | grep nginx  
      root     21421     1  0 20:37 ?        00:00:00 nginx: master process nginx  
    • nobody   24021 21421  0 20:49 ?        00:00:00 nginx: worker process  
      root     28768 21421  0 22:04 ?        00:00:00 nginx: master process nginx  
    • nobody   28769 28768  0 22:04 ?        00:00:00 nginx: worker process  
    • root     28786 24076  0 22:11 pts/1    00:00:00 grep nginx
    6)此时,新、旧版本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止旧版本的Nginx实例,您必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭。
    • # kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
    7)一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了:

      # ps -ef | grep nginx  
    • root     21421     1  0 20:37 ?        00:00:00 nginx: master process nginx  
      root     28768 21421  0 22:04 ?        00:00:00 nginx: master process nginx  
    • nobody   28769 28768  0 22:04 ?        00:00:00 nginx: worker process  
    • root     28799 24076  0 22:15 pts/1    00:00:00 grep nginx
    8)发送QUIT信号给旧的主进程,使其退出而只留下新的Nginx服务器运行。

      # kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`  
    • # ps -ef | grep nginx  
      root     28768     1  0 22:04 ?        00:00:00 nginx: master process nginx  
    • nobody   28769 28768  0 22:04 ?        00:00:00 nginx: worker process  
    • root     28808 24076  0 22:20 pts/1    00:00:00 grep nginx
    9)查看当前版本号。

      # nginx -v  
    • nginx version: nginx/1.3.0  


    到这里Nginx的“安静”升级就成功了。
    ------------------------------------------------------------------
    附上Nginx支持的几种控制信号:

      *  TERM,INT  快速关闭  
    • *  QUIT   从容关闭  
      *  HUP    平滑重启,重新加载配置文件  
    • *  USR1   重新打开日志文件,在切割日志时用途较大  
      *  USR2   平滑升级可执行程序  
    • *  WINCH 从容关闭工作进程
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    关于我们|Archiver||Linux99学习论坛    

    GMT+8, 2013-4-8 17:44 , Processed in 0.102371 second(s), 26 queries .

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部