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  重新打開日志文件

四、先安裝一個nginx做測試用

#用yum安裝nginx所需要的包及組件
[root@Centos ~]# yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel
#解壓nginx
[root@Centos ~]# tar zxvf nginx-1.6.0.tar.gz -C /usr/src/
[root@Centos ~]# cd /usr/src/nginx-1.6.0/
#安裝nginx  --后面都是指定的參數
[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
#查看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
#查看nginx版本
[root@Centos nginx-1.6.0]# nginx -v    #-V可以顯示的更詳細包括模塊
nginx version: nginx/1.6.0

五、進行nginx升級

  • 現在我們 需要將nginx版本進行升級 並在不影響業務的情況下添加SSL和pcre模塊
#解壓新nginx包
[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
#編譯   ###注意只進行編譯不執行make install
[root@Centos nginx-1.11.2]# make
[root@Centos nginx-1.11.2]# cd
#將nginx的可執行文件進行替換
[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/
#備份nginx配置文件
[root@Centos ~]# mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.old
#將新nginx配置文件
[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
#查看nginx進程,新舊替換中
[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是否升級成功

本文來自:https://www.cnblogs.com/bixiaoyu/p/6937453.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM