首頁 >運維 >Nginx >nginx維運中怎麼樣平滑升級

nginx維運中怎麼樣平滑升級

(*-*)浩
(*-*)浩原創
2019-11-26 14:08:293074瀏覽

nginx維運中怎麼樣平滑升級

可以在不中斷服務的情況下- 新的請求也不會丟失,使用新的nginx 可執行程序替換舊的(當升級新版本或添加/刪除伺服器模組時)。        ( 建議學習:nginx運維 )

首先,使用新的可執行程式取代舊的(最好做好備份),然後,寄USR2 ( kill -USR2 pid)訊號給主程序。

主程序將重新命名它的 .pid 檔案為 .oldbin (例如:/usr/local/nginx/logs/nginx.pid.oldbin),然後執行新的可執行程序,依序啟動新的主程序和新的工作進程:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

在這時,兩個nginx 實例會同時執行,一起處理輸入的請求。要逐步停止舊的實例,你必須發送WINCH 訊號給舊的主進程,然後,它的工作進程就將開始從容關閉:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

一段時間後,舊的工作進程處理了所有已連接的請求後退出,就僅由新的工作進程來處理輸入的請求了:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

#這時,因為舊的伺服器還尚未關閉它監聽的套接字,所以,透過下面的幾步,你仍可以恢復舊的伺服器:

發送HUP 訊號給舊的主進程- 它將在不重載設定檔的情況下啟動它的工作進程

發送QUIT 訊號給新的主進程,要求其從容關閉其工作進程

發送TERM 訊號給新的主進程,迫使其退出

如果因為某些原因新的工作進程不能退出,向其發送KILL 信號

新的主進程退出後,舊的主進程會由移除.oldbin 前綴,恢復為它的.pid 文件,這樣,一切就都恢復到升級之前了。

如果嘗試升級成功,而你也希望保留新的伺服器時,發送QUIT 訊號給舊的主進程使其退出而只留下新的伺服器運行:

      PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
    36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
    36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
    36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
    36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

以上是nginx維運中怎麼樣平滑升級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn