Nginx熱升級(jí)的流程

這篇文章主要講解了“Nginx熱升級(jí)的流程”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Nginx熱升級(jí)的流程”吧!

紹興ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!


熱升級(jí)流程

Nginx熱升級(jí)的流程

第一步就是把舊的 Nginx 替換為新的 Nginx 文件(binary文件),之所以說只替換 binary 文件是因?yàn)榇蟛糠謭?chǎng)景下,我們新編譯的 nginx 文件所指定的相應(yīng)的配置選項(xiàng),比如說配置文件的目錄在哪里?log 的所在目錄在哪里?必須保持和老的 Nginx 是一致的,否則的話沒有辦法復(fù)用 nginx.conf 文件,如果我們僅僅替換 binary 文件,請(qǐng)注意要備份,另外在新版本的 Linux 中,會(huì)要求在覆蓋一個(gè)正在使用的文件時(shí)需要用 cp -f 才能夠替換。

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

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

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

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

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

接下來看下不停機(jī)更新 Nginx 二進(jìn)制文件的具體流程圖:

不停機(jī)更新 Nginx 二進(jìn)制文件

Nginx熱升級(jí)的流程

一開始老的 master 進(jìn)程啟動(dòng)了四個(gè)綠色的 worker 進(jìn)程,當(dāng)我們更新了Nginx 的 binary 以后,向老 master 進(jìn)程發(fā)送了 SIGUSR2 信號(hào),這個(gè)時(shí)候老 master 進(jìn)程會(huì)把自己的 pid 文件改名,這個(gè)時(shí)候可以認(rèn)為是黃色這種的進(jìn)程。

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

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

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

感謝各位的閱讀,以上就是“Nginx熱升級(jí)的流程”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Nginx熱升級(jí)的流程這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁(yè)標(biāo)題:Nginx熱升級(jí)的流程
標(biāo)題網(wǎng)址:http://bm7419.com/article30/ijhhso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、ChatGPT、外貿(mào)網(wǎng)站建設(shè)外貿(mào)建站、網(wǎng)站營(yíng)銷網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)