nginx熱更新就是在操作系統不關軟件直接更新,更新期間軟件直接用。nginx采用master/worker的多進程模型,master進程負責整個nginx進程的管理。nginx的模塊化、熱更新、http處理流程、日志等機制都非常經典。
配置熱更新
NginX的配置修改之后,在不影響當前服務的情況下進行更新。
信號: HUP
過程: 分為Master部分和Worker部分。
Matser進程:
1> 通過ngx_signal_hanlder解析出獲取的信號,置ngx_reconfigure=1,標識Master要進行配置熱更新操作。 2> 調用ngx_init_cycle初始化新的cycle(重新加載nginx.conf以及各模塊的初始化)。 3> 調用ngx_start_worker_process啟動新的Worker子進程,子進程標識just_respwan=1(NGX_PROCESS_JUST_RESPAWN)表示剛啟動,區分新舊進程。 4> 調用ngx_start_cache_manager啟動新的cache manager子進程和cache loader子進程。子進程標識just_respawn=1(NGX_PROCESS_JUST_RESPAWN)表示剛啟動,區分新舊進程。 5> 睡眠100毫秒之后,調用ngx_signal_worker_process優雅的關閉老的worker、cache manager和cache loader進程。注意:只向just_respawn=0的進程進行發送信號。
Worker進程:
1> 通過ngx_signal_handler解析出為QUIT信號,置ngx_quit=1 2> 調用ngx_close_listening_sockets關閉監聽端口。設置ngx_exting=1 3> 如果定時器紅黑樹中為空,執行ngx_worker_process_exit退出。
注意:?
進程狀態標識: NGX_PROCESS_RESPAWN -> respawn =1 表示子進程退出后 執行重啟操作。 NGX_ PROCESS_JUST_RESPAWN -> just_spawn = 1 respawn = 1 表示子進程為剛創建的進程,已區別與老的子進程 以及子進程退出后 執行重啟操作。 NGX_PROCESS_JUST_SPAWN -> just_spawn =1 表示子進程為剛創建的進程,已區別與老的子進程 NGX_PROCESS_DETACHED -> detached = 1 沒有親緣關系,不需要建立通信信道 譬如Binary熱更新。
更多Nginx相關技術文章,請訪問Nginx使用教程欄目進行學習!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END