1. nginx平滑公升級
當我們開發了乙個新的nginx模組,須要公升級nginx binary時,須要進行下面的步驟:
a) 替換老的nginx binary
[root@lg-miui-file-mfs09 sbin]# mv nginx nginx.oldb) 向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]# scp [email protected]:/usr/local/nginx/sbin/nginx .
[email protected]'s password:
nginx
[root@lg-miui-file-mfs09 sbin]# ll ../logs/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 ?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 ?
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 16236ss 10:58 0:00 nginx: master process ./nginx root 16385 0.0 0.0 92924 6072 ?[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
root 16236 0.0 0.0 92920 3072 ?
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 16236s 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@lg-miui-file-mfs09 sbin]# ps aux | grep nginx
root 16385 0.0 0.0 92924 6072 ?
2. 回滾
假設我們在關閉老的工作進行之後檢視log發現新的nginx server執行有問題,我們能夠回滾到老的版本號。其過程例如以下:
a) 啟動老的worker 程序能夠通過向old master 程序傳送sighup訊號,讓其啟動老的worker 程序。
[root@lg-miui-file-mfs09 sbin]# ps aux | grep nginxs 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 ?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: 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假設新的master程序因為某些原因hung住了沒有關閉,能夠向它們傳送sigterm或者sigkill訊號。當新的master程序退出後。老的master程序會將nginx.pid.oldbin檔案重新命名為nginx.pid.[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
參考文獻:
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平滑公升級
有時,我們需要對我們的伺服器進行公升級更高版本。此時,如果我們強行將伺服器停止然後直接公升級,這樣原來在伺服器上執行著的程序就會被影響。如何解決這個問題呢?可以通過平滑公升級的方式來解決。平滑公升級時,不會停掉在執行著的程序,這些程序會繼續處理請求,但不會再接受新請求,在這些老程序在處理完還在處理的...