Nginx實戰案例—平滑升級與版本回退

Nginx實戰案例—平滑升級與版本回退

1. 平滑升級

爲什麼要平滑升級呢?
如果我們想要更新nginx,但它的更新也要耗費一定的時間。而平滑升級可以做到在線升級,保證不影響客戶的使用,並且升級後新版本對服務端的數據也不會覆蓋。

step1 需要兩個不同版本的nginx安裝包:

這裏我的是:nginx-1.14.2.tar.gz  nginx-1.16.1.tar.gz

在這裏插入圖片描述

step2 先安裝一個版本較低的nginx:

tar zxf nginx-1.14.2.tar.gz 
yum install gcc openssl-devel pcre-devel -y
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx
make && make install

step3 開啓nginx:

cd /usr/local/nginx/sbin/
./nginx
netstat -antlp | grep nginx		#查看端口信息
/usr/local/nginx/sbin/nginx -v	#查看版本信息
/usr/local/nginx/sbin/nginx -V	#查看編譯信息

在這裏插入圖片描述
step4 將之前的啓動腳本備份:

cp nginx nginx.old

在這裏插入圖片描述
step5 編譯安裝另一個安裝包:

tar zxf nginx-1.16.1.tar.gz 
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx	#根據老版本的編譯選項對新版本進行編譯
make									#make結束不要make install

step6 覆蓋老版本的啓動腳本:

cd /usr/local/nginx/sbin/
cp -f /root/nginx-1.16.1/objs/nginx .	#覆蓋老版本的啓動腳本

在這裏插入圖片描述
step7 向原來的nginx的master進程發送信號,不再接受新的請求:

新的nginx程序開啓worker進程,並且開始接收請求:

ps -ef | grep nginx | grep -v grep 	#查看進程
kill -USR2 4667						#4667爲nginx老進程的pid
kill -WINCH 4667	

在這裏插入圖片描述
注意:此時原來的nginx的master並沒有宕掉,只是不在接收請求,當有需要時,我們可以喚醒它

step8 測試:

/usr/local/nginx/sbin/nginx -v	#升級成功
/usr/local/nginx/sbin/nginx -V

在這裏插入圖片描述

注意:

  • 在編譯新版本的時候configure make結束不要make install,這會覆蓋原來的nginx
    此處只進行編譯步驟(make)不執行安裝步驟(make install)因爲make install命令的本質就是將編譯好的文件複製到對應的目錄中。所以此處省略make install以防止某些老的配置文件被覆蓋,我們只是爲了升級nginx,原來的配置需要保持不變,所以要確保配文件不會被覆蓋。
  • 不要製作軟鏈接
    使用這種方法有一個前提:就是你在啓動nginx時使用的是nginx二進制文件的絕對路徑,而不是直接在命令行中輸入"nginx"的方式啓動的nginx服務,如果沒有通過絕對路徑啓動nginx那麼當你向nginx進程中發送更新的信號時,nginx進程可能會無法找到新的二進制程序

2. 版本回退

step1 先還原nginx腳本:

cd /usr/local/nginx/sbin
cp -f nginx.old nginx

在這裏插入圖片描述

step2 重新喚起舊版本的master進程,讓其接收請求:

ps -ef | grep nginx | grep -v grep
kill -HUP 4667

在這裏插入圖片描述

step3 讓新版本的master進程不再接收請求,關閉worker進程:

kill -USR2 7197
kill -WINCH 7197

在這裏插入圖片描述

注意:這裏一定要分清除新老版本的進程pid

step4 測試:

查看nginx版本,回退到舊版本:

/usr/local/nginx/sbin/nginx -v
/usr/local/nginx/sbin/nginx -V

在這裏插入圖片描述

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