nginx平滑公升級

2021-09-07 13:48:09 字數 4240 閱讀 6314

1. nginx平滑公升級

當我們開發了乙個新的nginx模組,須要公升級nginx binary時,須要進行下面的步驟:

a) 替換老的nginx binary

[root@lg-miui-file-mfs09 sbin]# mv nginx nginx.old

[root@lg-miui-file-mfs09 sbin]# scp [email protected]:/usr/local/nginx/sbin/nginx .

[email protected]'s password:

nginx

b) 向old master process 傳送sigusr2訊號[root@lg-miui-file-mfs09 sbin]# kill -s sigusr2 16236nginx.pid檔案會被重新命名為nginx.pid.oldbin,而且執行新的nginx binary檔案,此時新老版本號會同一時候執行:
[root@lg-miui-file-mfs09 sbin]# ll ../logs/

total 14392

-rw-r--r-- 1 guojun1 500 893 may 30 10:58 error.log

-rw-r--r-- 1 guojun1 500 5617929 may 12 13:12 nginx-access.log

-rw-r--r-- 1 guojun1 500 9102050 may 13 22:39 nginx-error.log

-rw-r--r-- 1 root root 6 may 30 10:58 nginx.pid

-rw-r--r-- 1 root root 6 may 30 10:58 nginx.pid.oldbin

[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx

root 16236 0.0 0.0 92920 3064 ?

ss 10:58 0:00 nginx: master process ./nginx root 16237 0.0 0.0 94992 3988 ? s 10:58 0:00 nginx: worker process root 16238 0.0 0.0 94992 3988 ? s 10:58 0:00 nginx: worker process root 16239 0.0 0.0 94992 3988 ?

s 10:58 0:00 nginx: worker process root 16385 0.0 0.0 92924 6072 ? s 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? s 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process root 16445 0.0 0.0 103244 852 pts/4 s+ 10:58 0:00 grep nginx

c) 向old master process傳送sigwinch此時,master會」優雅地」關閉它的工作程序:

[root@lg-miui-file-mfs09 sbin]# kill -s sigwinch 16236

[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx

root 16236 0.0 0.0 92920 3072 ?

ss 10:58 0:00 nginx: master process ./nginx root 16385 0.0 0.0 92924 6072 ?

s 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? s 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process

d) 關閉old master假設檢視log傳送更新成功,能夠關閉old master,此時向old master程序傳送sigquit,僅僅留下新的server執行。

[root@lg-miui-file-mfs09 sbin]# kill -s sigquit 16236

[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx

root 16385 0.0 0.0 92924 6072 ?

s 10:58 0:00 nginx: master process ./nginx root 16386 0.0 0.0 94996 3908 ? s 10:58 0:00 nginx: worker process root 16387 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process root 16388 0.0 0.0 94996 3980 ? s 10:58 0:00 nginx: worker process

2. 回滾

假設我們在關閉老的工作進行之後檢視log發現新的nginx server執行有問題,我們能夠回滾到老的版本號。其過程例如以下:

a) 啟動老的worker 程序能夠通過向old master 程序傳送sighup訊號,讓其啟動老的worker 程序。

[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx

root 16385 0.0 0.0 92924 6072 ? s 10:58 0:00 nginx: master process ./nginx

root 44583 0.0 0.0 92924 6076 ?

s 11:57 0:00 nginx: master process ./nginx root 44584 0.0 0.0 94996 3984 ? s 11:57 0:00 nginx: worker process root 44585 0.0 0.0 94996 3984 ? s 11:57 0:00 nginx: worker process root 44586 0.0 0.0 94996 3984 ?

s 11:57 0:00 nginx: worker process root 44757 0.0 0.0 94996 3908 ? s 11:58 0:00 nginx: worker process root 44758 0.0 0.0 94996 3980 ? s 11:58 0:00 nginx: worker process root 44759 0.0 0.0 94996 3980 ?

s 11:58 0:00 nginx: worker process

b) 關閉新的master程序和worker程序向新的master程序傳送sigquit訊號。關閉新的master程序和worker程序;

[root@lg-miui-file-mfs09 sbin]# kill -s sigquit 44583

[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx

root 16385 0.0 0.0 92924 6072 ? s 10:58 0:00 nginx: master process ./nginx

root 44757 0.0 0.0 94996 3908 ? s 11:58 0:00 nginx: worker process

root 44758 0.0 0.0 94996 3980 ? s 11:58 0:00 nginx: worker process

root 44759 0.0 0.0 94996 3980 ? s 11:58 0:00 nginx: worker process

假設新的master程序因為某些原因hung住了沒有關閉,能夠向它們傳送sigterm或者sigkill訊號。當新的master程序退出後。老的master程序會將nginx.pid.oldbin檔案重新命名為nginx.pid. 

參考文獻:

nginx:

nginx平滑公升級

先來說下我今天要實驗nginx平滑公升級的環境,從nginx.1.8.0公升級到nginx1.9.5 大概的流程 nginx的程序分為master主程序和work工作程序,master程序主要管理事件訊號接受和分發,所有的請求處理都由work程序處理並返回結 果,nginx的平滑重啟或過載配置檔案等...

Nginx平滑公升級

原文 來自nginx官網 如果想要公升級nginx版本 或者在原本版上增加 刪除模組 同時保持服務不間斷,採用如下方式可滿足要求。1.使用新的二進位制檔案替換老的二進位制檔案,這需要注意的是nginx原始碼在執行make編譯後,不要直接make install,否則可能會覆蓋其他配置檔案,命令如下 ...

Nginx平滑公升級

有時,我們需要對我們的伺服器進行公升級更高版本。此時,如果我們強行將伺服器停止然後直接公升級,這樣原來在伺服器上執行著的程序就會被影響。如何解決這個問題呢?可以通過平滑公升級的方式來解決。平滑公升級時,不會停掉在執行著的程序,這些程序會繼續處理請求,但不會再接受新請求,在這些老程序在處理完還在處理的...