Nginx的平滑公升級和回滾

2021-10-07 10:11:51 字數 4296 閱讀 7860

隨著**併發訪問量越來越高,nginx web 伺服器也越來越流行,nginx 版本換代越來越頻繁,1.16.2版本的nginx更新了許多新功能,生產環境中版本公升級必然的,但是線上業務不能停,此時nginx的公升級就是運維的重要工作了。

多程序模式下的請求分配方式

nginx預設工作在多程序模式下,即主程序(master process)啟動後完成配置載入和埠繫結等動作,fork出指定數量的工作程序(worker process),這些子程序會持有監聽埠的檔案描述符(fd),並通過在該描述符上新增監聽事件來接受連線(accept)。

訊號的接收和處理

nginx主程序在啟動完成後會進入等待狀態,負責響應各類系統訊息,如sigchld、sighup、sigusr2等。

nginx訊號簡介

主程序支援的訊號

term, int: 立刻退出

quit: 等待工作程序結束後再退出

kill: 強制終止程序

usr1: 重新開啟日誌檔案

usr2: 啟動新的主程序,實現熱公升級

winch: 逐步關閉工作程序

工作程序支援的訊號

term, int: 立刻退出

quit: 等待請求處理結束後再退出

usr1: 重新開啟日誌檔案

[root@localhost ~]

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

向主程序(master)傳送usr2訊號,nginx會啟動乙個新版本的master程序和對應工作程序,和舊版一起處理請求

[root@localhost ~]

# ps aux | grep nginx

root 16396 0.0 0.5 47136 2684 ? ss 14:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 16404 0.0 0.7 47532 3548 ? s 14:54 0:00 nginx: worker process

root 21993 0.0 0.2 112724 996 pts/1 s+ 20:42 0:00 grep --color=auto nginx

[root@localhost ~]

# kill -usr2 16396

[root@localhost ~]

# ps aux | grep nginx

root 16396 0.0 0.5 47136 2684 ? ss 14:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 16404 0.0 0.7 47532 3548 ? s 14:54 0:00 nginx: worker process

root 21994 0.0 0.6 45968 3288 ? s 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 21995 0.0 0.3 46428 1892 ? s 20:44 0:00 nginx: worker process

root 21997 0.0 0.2 112724 996 pts/1 r+ 20:44 0:00 grep --color=auto nginx

向舊的nginx主程序(master)傳送winch訊號,它會逐步關閉自己的工作程序(主程序不退出),這時所有請求都會由新版nginx處理

[root@localhost ~]

# kill -winch 16396

[root@localhost ~]

# ps aux | grep nginx

root 16396 0.0 0.5 47136 2684 ? ss 14:49 0:00 nginx: master process /usr/local/nginx/sbin/nginx

root 21994 0.0 0.6 45968 3288 ? s 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 21995 0.0 0.3 46428 1892 ? s 20:44 0:00 nginx: worker process

注意:回滾步驟,傳送hup訊號

如果這時需要回退繼續使用舊版本,可向舊的nginx主程序傳送hup訊號,它會重新啟動工作程序,

仍使用舊版配置檔案。然後可以將新版nginx程序殺死(使用quit、term、或者kill)

[root@localhost ~]

# kill -hup 16396

公升級完畢,可向舊的nginx主程序(master)傳送(quit、term、或者kill)訊號,使舊的主程序退出

[root@localhost ~]

# kill -quit 16396

[root@localhost ~]

# ps aux | grep nginx

root 21994 0.0 0.6 45968 3288 ? s 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 21995 0.0 0.3 46428 1892 ? s 20:44 0:00 nginx: worker process

[root@localhost ~]

# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.16.0

nginx的熱部署以及平滑公升級和回滾

1,先來說一下執行nginx服務開啟的程序情況 ngnix中的程序分為兩類,一類是master程序,一類是worker程序 其中master程序是用來管理監控控制其下邊的worker程序的主程序,這個程序由root發起 其中原因是http這個服務需要啟用80埠,而只有root才有許可權啟用80埠 而...

openssh公升級和回滾

公升級有很多教程,但是回滾沒有很詳細的教程,因為回滾操作很少操作,但是生產環境要有預案,雖然我的回滾解決辦法有點蠢,但是沒有時間去研究那摩多,當時,直接把有關原環境資訊cp備份,然後回滾的時候還原。親測可用!wget o openssh 8.4p1.tar.gz wget o zlib 1.2.11...

nginx平滑公升級

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