首頁 > 運維 > Nginx > 如何平穩安全地升級nginx版本

如何平穩安全地升級nginx版本

王林
發布: 2021-02-03 10:52:11
轉載
3216 人瀏覽過

如何平穩安全地升級nginx版本

我們先來介紹一些下nginx支援的訊號。下面列出的是主進程可以接收的幾種訊號。

注意:worker行程也可以接收部分訊號,但是它和主行程的訊號處理機制有些不同,主行程支援的訊號worker行程不一定支援。

如何平穩安全地升級nginx版本

graceful stop的行為是:(1)程序不再監聽、接受新的請求;(2)程序繼續處理正在處理的請求,但處理完成後銷毀。

1. 升級

如果想對一個已運行的nginx實例進行版本升級,或者因為重新編譯了一個版本而替換舊版本,可以考慮按照以下一系列過程來平穩、安全地升級。當然,如果直接停止服務不會產生多大影響,直接停掉再啟動新版本nginx實例更方便簡單。

1.將新版本的nginx指令路徑取代掉舊的nginx指令。

通常,對於編譯安裝的nginx來說,採用軟連結的方式比較便捷。例如舊版的安裝路徑為/usr/local/nginx-1.12.0,為其建立一個軟連結/usr/local/nginx,如果有新版本/usr/local/nginx-1.12.1,只需修改軟連結/usr/local/nginx的指向目標為/usr/local/nginx-1.12.1即可。這樣/usr/local/nginx/sbin/nginx就會隨著軟連結的指向改變而指向新nginx程式。

2.對舊nginx實例的主程序發送USR2訊號。

kill -USR2 `cat /var/run/nginx/nginx.pid`
登入後複製

此訊號提示nginx舊的主程序要升級,並執行新的nginx程式。例如步驟1中,舊的nginx主進程為/usr/local/nginx/sbin/nginx,但其指向的是/usr/local/nginx-1.12.0/sbin/nginx,發送該訊號後仍將執行/ usr/local/nginx/sbin/nginx,但此時因為軟連結目標已改變,使得此時啟動的nginx已經是/usr/local/nginx-1.12.1/sbin/nginx程式。

如何平穩安全地升級nginx版本

此外,發送該訊號後將會切換pid文件,舊的pid檔案被重新命名為nginx.pid.oldbin,記錄的是舊的nginx主進程pid值,新的pid檔為nginx.pid,記錄的是新啟動的nginx的主程序pid值。

[root@xuexi ~]# ls /var/run/nginx*     
/var/run/nginx.pid  /var/run/nginx.pid.oldbin
登入後複製

3.graceful stop舊的主程序編號。 kill -QUIT `cat /var/run/nginx/nginx.pid.oldbin`

向舊的主程序號碼發送QUIT訊號,該訊號將使得主進程以graceful的方式關閉。這將使得舊的主流程、舊的worker進程不再接受任何新請求,但卻會把正在處理過程中的請求處理完畢,然後被銷毀退出。

4.更穩健的方式是先讓worker進程graceful stop,在新版本的nginx實例運行一小段時間後如果正常工作,再graceful stop舊的主進程。

kill -WINCH `cat /var/run/nginx/nginx.pid.oldbin`
# a period of time goes, graceful stop old master nginx
kill -QUIT `cat /var/run/nginx/nginx.pid.oldbin`
登入後複製

在發送WINCH訊號給舊的主進程後,舊的worker進程將逐漸退出,但舊的主進程會保留不退出。

如何平穩安全地升級nginx版本

如果發現新版本的nginx實例不滿意,可以直接向舊主程序號碼發送HUP訊號,這樣舊的主程序就會重新讀取設定檔並fork新的worker進程,再將新的主進程號殺掉(可以graceful stop),就可以還原為舊版的nginx實例。

2.降級

上面第4步其實就是最安全的降級方式。即:

kill -HUP `cat /var/run/nginx/nginx.pid.oldbin`
kill -QUIT `cat /var/run/nginx/nginx.pid`
登入後複製

但如果舊的主進程號已經被殺掉了,目前只有新版本的nginx實例在運行,那麼只需以升級的步驟進行降級即可。即:

kill -USR2 `cat /var/run/nginx/nginx.pid`
kill -QUIT `cat /var/run/nginx/nginx.pid.oldbin`
登入後複製

3.一鍵升級腳本

以下是升級的腳本。

如何平穩安全地升級nginx版本

相關推薦:nginx教學

#

以上是如何平穩安全地升級nginx版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板