1. 程式人生 > 其它 >LeetCode——748. 最短補全詞(Java)

LeetCode——748. 最短補全詞(Java)

問題

如果想對Nginx的版本進行更新,或者要應用一些新的模組,最簡單的做法就是停止當前的Nginx服務,然後開啟新的Nginx服務。但是這樣會導致在一段時間內,使用者是無法訪問伺服器。為了解決這個問題,我們就需要用到Nginx伺服器提供的平滑升級功能。這個也是Nginx的一大特點,使用這種方式,就可以使Nginx在7*24小時不間斷的提供服務了。

接下來我們分析下需求:

需求:Nginx的版本最開始使用的是Nginx-1.18.0,由於服務升級,需要將Nginx的版本升級到Nginx-1.20.2,要求Nginx不能中斷提供服務。

為了應對上述的需求,提供兩種解決方案:
方案一:使用Nginx服務訊號完成Nginx的升級
方案二:使用Nginx安裝目錄的make命令完成升級

環境準備

  1. 先準備兩個版本的Nginx分別是1.18.0和1.20.2

  2. 使用Nginx原始碼安裝的方式將1.18.0版本安裝成功並正確訪問

# 進入安裝目錄
/configure 
make && make install
  1. 將Nginx1.20.2進行引數配置和編譯,不需要進行安裝。
# 進入安裝目錄 
./configure 
make

使用Nginx服務訊號進行升級

  1. 將1.18.0版本的sbin目錄下的nginx進行備份
cd /usr/local/nginx/sbin 
mv nginx nginxold
  1. 第二步:將Nginx1.20.2安裝目錄編譯後的objs目錄下的nginx檔案,拷貝到原來/usr/local/nginx/sbin目錄下
cd ~/nginx/core/nginx-1.20.2/objs 2 cp nginx /usr/local/nginx/sbin
  1. 傳送訊號USR2給Nginx的1.18.0版本對應的master程序
    傳送USR2訊號給master程序,告訴master程序要平滑升級,這個時候,會重新開啟對應的master程序和work程序,整個系統中將會有兩個master程序,
    並且新的master程序的PID會被記錄在/usr/local/nginx/logs/nginx.pid
    而之前的舊的master程序 PID 會被記錄在/usr/local/nginx/logs/nginx.pid.oldbin檔案中
    接著再次傳送QUIT訊號給舊的master程序,讓其處理完請求後再進行關閉

  2. 傳送訊號QUIT給Nginx的1.18.0版本對應的master程序

kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

使用Nginx安裝目錄的make命令完成升級

  1. 將1.18.0版本的sbin目錄下的nginx進行備份
cd /usr/local/nginx/sbin 
mv nginx nginxold
  1. 將Nginx1.20.2安裝目錄編譯後的objs目錄下的nginx檔案,拷貝到原來/usr/local/nginx/sbin目錄下
cd ~/nginx/core/nginx-1.20.2/objs 
cp nginx /usr/local/nginx/sbin
  1. 進入到安裝目錄,執行make upgrade

  2. 檢視是否更新成功

./nginx -v