先來說下我今天要實驗nginx平滑公升級的環境,從nginx.1.8.0公升級到nginx1.9.5
大概的流程:
nginx的程序分為master主程序和work工作程序,master程序主要管理事件訊號接受和分發,所有的請求處理都由work程序處理並返回結
果,nginx的平滑重啟或過載配置檔案等公升級,首先是向master傳送重啟或過載配置檔案訊號,然後master告訴所有的work程序不再接受新的
請求,然後master另起新的work程序,最後告訴舊的work程序可以光榮退出了
wget
wget
首先先安裝好1.8.0
./configure
--prefix
=/usr
/local
/nginx
--sbin
-path
=/sbin
/nginx
--conf
-path
=/etc
/nginx
.conf
make
make install
#啟動nginx
/sbin
/nginx
#檢視nginx情況
[root@iz283rmolcfz
~]#netstat
-anpl
|grep nginx
tcp 00
0.0.
0.0:
800.0
.0.0
:*listen
7940
/nginx
如果在啟動中報錯:
[root@iz283rmolcfz nginx
-1.8.0
]#/sbin
/nginx -t
-c /etc
/nginx
.conf
nginx:[
emerg
]unexpected end of file
,expecting
";"or
"}"in
/etc
/mime
.types
:1300
nginx
:configuration file
/etc
/nginx
.conf test failed
#解決方法:
[root@iz283rmolcfz nginx
-1.8.0
]#ll
/etc
/mime
.types*-
rw-r--
r--.
1root root
43591
sep23
2011
/etc
/mime
.types-rw
-r--r
--1root root
3957
oct1618:
06/etc/
mime
.types
.default
[root@iz283rmolcfz nginx
-1.8.0
]#cp
/etc
/mime
.types
/etc
/mime
.types
.old
[root@iz283rmolcfz nginx
-1.8.0
]#cp
/etc
/mime
.types
.default
/etc
/mime
.types
瀏覽器訪問頁面,響應頭資訊 sever nginx/1.8.0
說明nginx1.8.0版本已安裝,並且正在執行,接下來開始安裝1.9.5版本
./在make install時,會生成/sbin/nginx.oldconfigure
--prefix
=/usr
/local
/nginx
--sbin
-path
=/sbin
/nginx
--conf
-path
=/etc
/nginx
.conf
make
make install
(由於nginx程序已在記憶體中,所以硬碟檔案的變動也不影響正在執行的nginx服務)
關鍵的步驟:
#更新 nginx.conf,不同版本的nginx,有可能nginx.conf是不一樣的,所以我們要使用nginx1.9.5的conf檔案。nginx.conf.defaule 就是剛剛在make install時候生成的當nginx關閉後,對於的pid也會被刪除,只有啟動後才會再生成乙個新的pid[root@iz283rmolcfz nginx
-1.9.5
]#ll
/etc
/nginx
.conf*-
rw-r--
r--1root root
2656
oct1618:
06/etc/
nginx
.conf-rw
-r--r
--1root root
2656
oct1618:
18/etc/
nginx
.conf
.default
[root@iz283rmolcfz nginx
-1.9.5
]#cp
/etc
/nginx
.conf
/etc
/nginx
.conf
.old
[root@iz283rmolcfz nginx
-1.9.5
]#cp
/etc
/nginx
.conf
.default
/etc
/nginx
.conf
#傳送平滑公升級資訊,此時會生成/usr/local/nginx/logs/nginx.pig.oldbin
kill -s
-sigusr2
`cat /usr/local/nginx/logs/nginx.pid`
#啟動新版本nginx,此時在瀏覽器訪問頁面,有時候是1.8.0,有時候是1.9.5,但正在執行的程序pid不變
/sbin
/nginx
-s reload
#優雅退出舊版本nginx,再次重新整理瀏覽器,頁面的頭部sever nginx/1.9.5,
多次重新整理後也是這樣
kill
-s sigquit
`cat /usr/local/nginx/logs/nginx.pid.oldbin`
問題:1.nginx1.8.0的nginx命令 是否可以給 1.9.0版本傳送資訊,如停止訊號?
答:都是向同乙個pid傳送就可以
Nginx平滑公升級
原文 來自nginx官網 如果想要公升級nginx版本 或者在原本版上增加 刪除模組 同時保持服務不間斷,採用如下方式可滿足要求。1.使用新的二進位制檔案替換老的二進位制檔案,這需要注意的是nginx原始碼在執行make編譯後,不要直接make install,否則可能會覆蓋其他配置檔案,命令如下 ...
Nginx平滑公升級
有時,我們需要對我們的伺服器進行公升級更高版本。此時,如果我們強行將伺服器停止然後直接公升級,這樣原來在伺服器上執行著的程序就會被影響。如何解決這個問題呢?可以通過平滑公升級的方式來解決。平滑公升級時,不會停掉在執行著的程序,這些程序會繼續處理請求,但不會再接受新請求,在這些老程序在處理完還在處理的...
nginx平滑公升級
nginx在編譯安裝完成之後,出於以下兩種考慮都需要進行公升級 而nginx所採用的平滑公升級可以保證在不停止服務的情況下解決以上問題。我們以動態增加 with http stub status module模組為例,步驟如下 1.檢視nginx版本號及已安裝模組 root foundation7 ...