Nginx--平滑升級
阿新 • • 發佈:2020-12-13
在不中斷服務的情況下,新的請求也不會丟失,使用新的 nginx 可執行程式替換舊的
1檢視老版本的編譯選項
[root@localhost ~]# nginx -V nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --with-http_realip_module --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
2編譯新版
[root@localhost ~]# cd nginx-1.18.0/ [root@localhost nginx-1.18.0]# ./ configure --with-http_realip_module --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost nginx-1.18.0]# make && make install
3用新編譯的命令替換原來的命令
[root@localhost nginx-1.18.0]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak [root@localhost nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/
4啟用新的關閉舊的
[root@localhost nginx-1.18.0]# kill -USR2 \`cat /usr/local/nginx/logs/nginx.pid` #主程序將重新命名它的.pid檔案為.oldbin 然後執行新的可執行程式,依次啟動新的主程序和新的工作程序 [root@localhost nginx-1.18.0]# kill -WINCH \`cat /usr/local/nginx/logs/nginx.pid.oldbin` #給舊的主進發WINCH訊號,把舊的主程序關閉,把所有請求轉到新的主程序,但是原有的請求不會中斷,有新請求的時候發到新程序#這時,因為舊的伺服器還尚未關閉它監聽的套接字,所以,通過下面的幾步,仍可以恢復舊的伺服器: 1.傳送 HUP 訊號給舊的主程序 - 它將在不過載配置檔案的情況下啟動它的工作程序 2.傳送 QUIT 訊號給新的主程序,要求其從容關閉其工作程序 3.傳送 TERM 訊號給新的主程序,迫使其退出 4.如果因為某些原因新的工作程序不能退出,向其傳送 KILL 訊號 #新的主程序退出後,舊的主程序會由移除 .oldbin 字首,恢復為它的 .pid 檔案,這樣,一切就都恢復到升級之前了 #如果嘗試升級成功,但也希望保留新的伺服器時,傳送 QUIT 訊號給舊的主程序使其退出而只留下新的伺服器執行 [root@localhost nginx-1.18.0]# kill -QUIT \`cat /usr/local/nginx/logs/nginx.pid.oldbin`
kill 訊號
TERM, INT 快速關閉
QUIT 從容關閉,關閉主程序順便關閉工作子程序
HUP 過載配置用新的配置開始新的工作程序從容關閉舊的工作程序
USR1 重新開啟日誌檔案
USR2 平滑升級可執行程式
WINCH 從容關閉工作程序,不會立即關閉子程序