【Nginx 運維實戰】版本替換:強制 vs 平滑升級全解析
- 一:版本替換的兩種思路
- 二:使用場景對比
- 三:實戰
- 1)`強制替換`
- 1.備份舊版本
- 2.替換為新版本
- 3.**賦予執行權限**
- 4.**重啟 `Nginx`**
- 2)`平滑替換`
- 1.確認進程文件
- 2.備份舊版本
- 3.替換為新版本
- 4.發送 `USR2` 信號
- 5.關閉舊進程
- 總結
🚀 在日常運維中,Nginx 升級是一個繞不開的需求。無論是功能優化、漏洞修復,還是安全加固,我們都需要定期替換新版本。但如何在 不中斷業務 的前提下完成替換?本文將帶你深入理解 Nginx 版本替換的兩種方式:強制替換和平滑替換。
一:版本替換的兩種思路
強制替換
- 原理:直接覆蓋舊二進制 →
systemctl restart nginx
- 特點:整個過程會有 短暫的服務中斷
- 原理:直接覆蓋舊二進制 →
平滑替換
- 原理:發送
USR2
信號 → 新舊進程并存 → 等待舊請求處理完再關閉 - 特點:無中斷升級,升級體驗絲滑
- 原理:發送
二:使用場景對比
替換方式 | ? 適合場景 | ? 不適合場景 |
---|---|---|
強制替換 | - 測試 / 開發環境 - 小流量業務 - 一次性部署 | - 高可用生產環境 |
平滑替換 | - 生產環境 - 高并發業務 - 小版本更新、安全補丁 | - 非生產環境 - 跨大版本升級 |
三:實戰
1)強制替換
?? 注意:會有幾秒鐘的中斷,不推薦生產使用。
1.備份舊版本
# 查找 Nginx 命令目錄
which nginx
/usr/sbin/nginx
# 備份舊版本 Nginx(可選,也可以直接刪掉)
mv /usr/sbin/nginx /usr/sbin/nginx-<版本號>
2.替換為新版本
cp -r nginx /usr/sbin
3.賦予執行權限
chmod 755 /usr/sbin/nginx
4.重啟 Nginx
systemctl restart nginx
2)平滑替換
🎉最終效果:新進程接管流量,零中斷完成升級
1.確認進程文件
ls -l /var/run/ | grep nginx*
cat /var/run/nginx.pid
2.備份舊版本
# 查找 Nginx 命令目錄
which nginx
/usr/sbin/nginx
# 備份舊版本 Nginx(可選,也可以直接刪掉)
mv /usr/sbin/nginx /usr/sbin/nginx-<版本號>
3.替換為新版本
cp -r nginx /usr/sbin
4.發送 USR2
信號
? 結果:
nginx.pid
:新進程nginx.pid.oldbin
: 舊進程
kill -USR2 `cat /var/run/nginx.pid`
ls -l /var/run/ | grep nginx*
-rw-r--r-- 1 root root 7 8月 20 12:40 nginx.pid
-rw-r--r-- 1 root root 5 8月 20 10:08 nginx.pid.oldbin
5.關閉舊進程
kill -9 <舊 master pid>
總結
-
強制替換:快刀斬亂麻 → 簡單,但會閃斷
-
平滑替換:溫水煮青蛙 → 稍復雜,但生產必備
? 最佳實踐
-
小規模業務 → 強制替換即可
-
核心系統 → 平滑替換必選
-
跨大版本升級 → 提前測試兼容性