在之前做過 nginx 熱公升級的演示,他能保證nginx在不停止服務的情況下更換他的 binary 檔案,這個功能非常有用,但我們在執行 nginx 的 binary 檔案公升級過程中,還是會遇到很多問題,比如老的 worker 程序一直退不掉或者新的 worker 程序公升級以後出現問題需要考慮回滾,或者公升級新的 nginx 檔案以後會發現預期的功能或者指向的配置檔案出現了錯誤,下面我們來看下看熱公升級的流程是怎樣進行的?
第一步就是把舊的 nginx 替換為新的 nginx 檔案(binary檔案),之所以說只替換 binary 檔案是因為大部分場景下,我們新編譯的 nginx 檔案所指定的相應的配置選項,比如說配置檔案的目錄在**?log 的所在目錄在**?必須保持和老的 nginx 是一致的,否則的話沒有辦法復用 nginx.conf 檔案,如果我們僅僅替換 binary 檔案,請注意要備份,另外在新版本的 linux 中,會要求在覆蓋乙個正在使用的檔案時需要用cp -f
才能夠替換。
接下來我們像現在的老 master 程序傳送 usr2 訊號,這時候我們注意到,我們沒有辦法通過 nginx 命令列直接用nginx -s
乙個訊號來處理,因為 nginx 到目前為止,還沒有支援這樣的訊號。
傳送 usr2 訊號以後,現有的 master 程序會做以下幾件事情:修改 pid 檔名,加字尾 .oldbin,這是為什麼呢?這是在為新的 master 程序讓路,雖然 master、worker 程序都可以接受訊號,但是為了管理方便,通常不對 worker 程序直接傳送訊號,所以我們依賴於 master 程序,他必須把他的 pid 儲存下來,為了新的 master 使用 pid.bin 這個檔名,所以把老的 pid 檔案改為 pid.oldbin。
接下來使用新的二進位制檔案啟動新的 master 程序,所以到此為止,會出現兩個 master 程序和老的 worker 程序,然後新的 master 程序會自動啟動新的 worker 程序,所以這時候我們會發現兩個 master 程序和多個 worker 程序的情況。
接下來我們要向老的 master 程序傳送 quit 訊號,怎麼樣找到老的 master 程序呢?我們可以根據ps
看到 master 程序的程序號,或者通過 .oldbin 檔案找到老的 master 程序的程序號,向這個程序號傳送 quit 訊號,那麼老的 master 程序會優雅的關閉老 worker 程序,這樣我們的熱公升級就結束。
但是老 master 程序是一直儲存下來的,這是為了方便我們進行回滾,也就是發現新的 nginx 程式有問題了,這個時候因為老的 master 程序還在,可以向老的 master 程序傳送 hup 訊號,相當於執行了一次 reload,會啟動新的 worker 程序,然後再向新 master 程序傳送 quit 訊號,也就是要求新的 worker 程序優雅退出,就實現了回滾。
接下來看下不停機更新 nginx 二進位制檔案的具體流程圖:
一開始老的 master 程序啟動了四個綠色的 worker 程序,當我們更新了nginx 的 binary 以後,向老 master 程序傳送了 sigusr2 訊號,這個時候老 master 程序會把自己的 pid 檔案改名,這個時候可以認為是黃色這種的程序。
那麼啟動了新的 master 程序是怎麼樣啟動的呢?他啟動了新的子程序,也就是說新的 master 程序是老 master 程序的子程序,但這個子程序是使用了新的 binary 載入來啟動的,在中間這個流程新老 nginx 並存,但是老的 master 開始關閉監聽埠,所有的黃色老的 worker 程序開始優雅地退出,在完成以後就會出現只有新的 master 程序存在的場景。
當退出老 master 程序以後不能進行回滾,如果想回滾,就需要再走一次熱公升級流程,用備份好的老 nginx 檔案作為新的熱公升級檔案(因此建議備份舊的 nginx 檔案)。
在乙個父程序退出,而它的乙個或多個子程序還在執行時,那麼這些子程序將成為孤兒程序。孤兒程序將被 init 程序(程序號為1)所收養,並由 init 程序對它們完成狀態收集工作。所以老 master 程序退出後,新的 master 程序並不會退出。
以上就是熱公升級流程,我們可以通過他實現不停機更新我們的 nginx,這為我們持續使用 nginx 的最新特性提供了幫助。
在熱公升級之前,建議備份舊的 nginx 檔案,以防公升級後出現問題,便於回滾。
Python Web不知道怎麼學?看這篇就夠了
python有很多作用,接觸過python的朋友肯定知道其幾乎無所不能,前端 後端 資料 ml ai 自動化 爬蟲 資料分析,人工智慧等等。第一階段 python入門 框架再怎麼變,基本語法不會變,基礎中的基礎 資料型別 迴圈判斷 常用模組 函式 迭代器 裝飾器 遞迴 迭代 反射 物件導向程式設計 ...
6 精通MATLAB運算方法看這篇文章就夠了
學習目標 學習經常使用的運算方法 大於,小於,等於,不等於 clear all a 7 5 b1 rand 2,2 b2 b1 0.6 b3 b1 0.7 c1 eq b2,b3 c2 b2 b3 比較大小 clear all format long a 4.44 eps b 4.44 c1 a b...
2 精通MATLAB資料型別看這篇文章就夠了
學習目標 1 資料型別的強制轉換,數值範圍 2 取整函式的使用學習 3 複數的使用學習 clear all shu 66 雙精度浮點型,強制轉換成整型 shu8 int8 shu shu16 int16 shu shu32 int32 shu shu64 int64 shu zifuchuan da...