nginx平滑升級

nginx平滑升級

    當需要將正運行的Nginx升級,可以在不中斷服務的情況下進行,具體步驟如下:

1、下載新的Nginx,重新編譯到舊版本的安裝路徑中。重編譯之前,先備份一下舊的可執行文件。


2、查詢原來安裝配置信息

# netstat -unlatp | grep nginx
tcp        0      0 0.0.0.0:80                0.0.0.0:*                   LISTEN      2410/nginx          
tcp        0      0 0.0.0.0:443                0.0.0.0:*                   LISTEN      2410/nginx          

# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.1built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module


3、編譯新版本(現最新的穩定版爲1.10.3)

# tar -xvf nginx-1.10.2.tar.gz
# cd nginx-1.10.23 ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module4 make

# mv  /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginx-low   #備份原版本

# cp  objs/nginx   /usr/local/nginx/sbin/         #cp新的啓動程序到sbin目錄

# make upgrade                             #執行升級

# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

# sleep 1

# test -f /usr/local/nginx/logs/nginx.pid.oldbin

# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

注:執行kill -USR2指令,他將存儲有舊版本主進程ID的文件重命名爲.oldbin:

 命令格式:kill -USR2 舊版本的Nginx主進程號

 一般情況下是這樣的:kill -USR2 `cat /usr/local/nginx/nginx.pid`


4、進入新版本的安裝目錄驗證並啓動新的Nginx程序。

# ./sbin/nginx -V

nginx version: nginx/1.10.2
……………………

# ulimit -SHn 65535

# /usr/local/nginx/sbin/nginx


5、此時新舊版本的Nginx會同時運行,共同處理請求。要逐步停止舊版本的Nginx,必須發送WINCH信號給舊的主進程。然後,他的工作進程將從容關閉。

# kill -WINCH 舊版本的Nginx主進程號

 

6、一段時間後,舊的工作進程處理完了所有的請求後退出,僅由新的進程來處理輸入請求了。可用下面的命令查看:

# ps -ef | grep nginx

 

7、現在可以決定使用新版本還是恢復到舊版本:

kill -HUP 舊的主進程號 :Nginx在不重載配置文件的情況下啓動他的工作進程

kill -QUIT 新的主進程號 :從容關閉其工作進程

kill -TERM 新的主進程號 :強制退出

kill 新的主進程號或舊的主進程號:如果因爲某些原因新的工作進程不能退出,則向其發送kill信號

 

新的主進程退出後,舊的主進程會移除.oldbin後綴,恢復爲他的.pid文件,這樣,一切就都恢復爲升級之前了。
如果嘗試升級成功,而自己又希望保留新版本時,可發送QUIT信號給舊的主進程,使其退出而只留下新的進程運行:kill -QUIT 舊主進程號


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章