平滑重啟更新(GR機制)
什么是平滑啟動機制
什么時候用到平滑重啟
- 平滑重啟一般應用于業務更新或者版本發布過程中,能夠避免因為代碼發布重啟服務導致的暫時性服務不可用的影響。
ngnix 平滑重啟和平滑更新
- Nginx的進程分為master主進程和work工作進程,master進程主要管理事件信號接受和分發,所有的請求處理都由work進程處理并返回結 果,Nginx的平滑重啟或重載配置文件等升級,首先是向master發送重啟或重載配置文件信號,然后master告訴所有的work進程不再接受新的 請求,然后master另起新的work進程,最后告訴舊的work進程可以光榮退出了。
- 平滑更新 :在upgrade過程中,還涉及到3個信號(USR2、WINCH和QUIT)。
首先發送USR2信號給原master,原master進程會額外啟動一個master進程和若干worker進程,新舊worker進程同時提供對外服務。
第二步發送WINCH信號,原worker進程停止服務并退出。
最后發送QUIT信號給原master使之退出,只保留新的master和worker。
php-fpm 平滑重啟
- php-fpm的reload平滑重啟是指:假設128個php-cgi進程中有50個進程正在處理PHP程序,而剩余的78個進程處于閑置狀態,php-fpm接到平滑重啟信號后,會kill掉78個閑置進程,然后新啟動128個進程,新請求交給新啟動的進程來處理,而那50個進程,只有等到它們處理完自己當前正在執行的PHP程序后,才會被干掉。
- php-fpm master 進程可以理解以下的信號:
- INT, TERM 立刻終止
- QUIT 平滑終止
- USR1 重新打開日志文件
- USR2 平滑重載所有worker進程并重新載入配置和二進制模塊
- 關閉php-fpm:
- kill -INT
cat /usr/local/php/var/run/php-fpm.pid
- 平滑重啟php-fpm:
- kill -USR2
cat /usr/local/php/var/run/php-fpm.pid
- 注意php-fpm.pid文件需要到到php-fpm.conf配置文件里面打開:
[global] ; Pid file ; Note: the default prefix is /usr/local/php/var ; Default Value: none pid = run/php-fpm.pid //即,將pid(;pid = run/php-fpm.pid)前的;去掉。
參考:https://www.cnblogs.com/justdoyou/p/7152334.html
http://ask.apelearn.com/question/11387
轉載于:https://www.cnblogs.com/frankltf/p/8862492.html