溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx熱升級的流程

發(fā)布時間:2021-08-31 14:52:35 來源:億速云 閱讀:136 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“Nginx熱升級的流程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx熱升級的流程”吧!


熱升級流程

Nginx熱升級的流程

第一步就是把舊的 Nginx 替換為新的 Nginx 文件(binary文件),之所以說只替換 binary 文件是因為大部分場景下,我們新編譯的 nginx 文件所指定的相應的配置選項,比如說配置文件的目錄在哪里?log 的所在目錄在哪里?必須保持和老的 Nginx 是一致的,否則的話沒有辦法復用 nginx.conf 文件,如果我們僅僅替換 binary 文件,請注意要備份,另外在新版本的 Linux 中,會要求在覆蓋一個正在使用的文件時需要用 cp -f 才能夠替換。

接下來我們像現(xiàn)在的老 master 進程發(fā)送 USR2 信號,這時候我們注意到,我們沒有辦法通過 Nginx 命令行直接用 nginx -s 一個信號來處理,因為 Nginx 到目前為止,還沒有支持這樣的信號。

發(fā)送 USR2 信號以后,現(xiàn)有的 master 進程會做以下幾件事情:修改 pid 文件名,加后綴 .oldbin,這是為什么呢?這是在為新的 master 進程讓路,雖然 master、worker 進程都可以接受信號,但是為了管理方便,通常不對 worker 進程直接發(fā)送信號,所以我們依賴于 master 進程,他必須把他的 pid 保存下來,為了新的 master 使用 pid.bin 這個文件名,所以把老的 pid 文件改為 pid.oldbin。

接下來使用新的二進制文件啟動新的 master 進程,所以到此為止,會出現(xiàn)兩個 master 進程和老的 worker 進程,然后新的 master 進程會自動啟動新的 worker 進程,所以這時候我們會發(fā)現(xiàn)兩個 master 進程和多個 worker 進程的情況。

接下來我們要向老的 master 進程發(fā)送 QUIT 信號,怎么樣找到老的 master 進程呢?我們可以根據(jù) ps 看到 master 進程的進程號,或者通過 .oldbin 文件找到老的 master 進程的進程號,向這個進程號發(fā)送 QUIT 信號,那么老的 master 進程會優(yōu)雅的關閉老 worker 進程,這樣我們的熱升級就結束。

但是老 master 進程是一直保存下來的,這是為了方便我們進行回滾,也就是發(fā)現(xiàn)新的 Nginx 程序有問題了,這個時候因為老的 master 進程還在,可以向老的 master 進程發(fā)送 HUP 信號,相當于執(zhí)行了一次 reload,會啟動新的 worker 進程,然后再向新 master 進程發(fā)送 QUIT 信號,也就是要求新的 worker 進程優(yōu)雅退出,就實現(xiàn)了回滾。

接下來看下不停機更新 Nginx 二進制文件的具體流程圖:

不停機更新 Nginx 二進制文件

Nginx熱升級的流程

一開始老的 master 進程啟動了四個綠色的 worker 進程,當我們更新了Nginx 的 binary 以后,向老 master 進程發(fā)送了 SIGUSR2 信號,這個時候老 master 進程會把自己的 pid 文件改名,這個時候可以認為是黃色這種的進程。

那么啟動了新的 master 進程是怎么樣啟動的呢?他啟動了新的子進程,也就是說新的 master 進程是老 master 進程的子進程,但這個子進程是使用了新的 binary 載入來啟動的,在中間這個流程新老 Nginx 并存,但是老的 master 開始關閉監(jiān)聽端口,所有的黃色老的 worker 進程開始優(yōu)雅地退出,在完成以后就會出現(xiàn)只有新的 master 進程存在的場景。

當退出老 master 進程以后不能進行回滾,如果想回滾,就需要再走一次熱升級流程,用備份好的老 Nginx 文件作為新的熱升級文件(因此建議備份舊的 Nginx 文件)。

在一個父進程退出,而它的一個或多個子進程還在運行時,那么這些子進程將成為孤兒進程。孤兒進程將被 init 進程(進程號為1)所收養(yǎng),并由 init 進程對它們完成狀態(tài)收集工作。所以老 master 進程退出后,新的 master 進程并不會退出。

感謝各位的閱讀,以上就是“Nginx熱升級的流程”的內容了,經過本文的學習后,相信大家對Nginx熱升級的流程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI