摘要:熱部署,就是在應用正在運行的時候升級軟件,卻不需要重新啟動應用。熱部署的流程是備份舊的可執行文件新的可執行文件直接替換舊的此時舊的進程還在運行向進程發送熱部署信號,新的進程啟動,舊的不再就收請求。關閉舊的進程,完成熱部署。
熱部署,就是在應用正在運行的時候升級軟件,卻不需要重新啟動應用。
首先在本地模擬一個線上需要升級 Nginx 的環境,假設舊版本為 nginx-1.0.15,需要升級到 nginx-1.16.0。
配置舊版本# 下載 nginx-1.0.15 wget http://nginx.org/download/nginx-1.0.15.tar.gz # 解壓壓縮包 tar -zxf nginx-1.0.15.tar.gz # 進入解壓后的目錄 cd nginx-1.0.15 # 配置 nginx ./configure --prefix=/home/nginx # 編譯安裝 make && make install # 運行 nginx sudo /home/nginx/sbin/nginx
此時訪問服務器地址應該可以看到 nginx 的歡迎頁面了。
獲得新版本二進制# 下載 nginx-1.16.0 wget http://nginx.org/download/nginx-1.16.0.tar.gz # 解壓壓縮包 tar -zxf nginx-1.16.0 # 進入解壓后的目錄 cd nginx-1.16.0/ # 配置 nginx ./configure --prefix=/home/nginx # 只編譯不需要安裝 make
在編譯后的 objs 目錄中,可以看到二進制文件 nginx。
熱部署經過以上步驟,我們實現了一個正在運行的舊版本 nginx 和編譯完成的新版本 nginx 二進制執行文件。
熱部署的流程是:
備份舊的 nginx 可執行文件
新的 nginx 可執行文件直接替換舊的(此時舊的 nginx 進程還在運行)
向 nginx master 進程發送熱部署信號,新的 nginx 進程啟動,舊的 worker 不再就收請求。
關閉舊的 worker 進程,完成熱部署。
# 備份 cp /home/nginx/sbin/nginx /home/nginx/sbin/nginx.old # 替換 cp -f objs/nginx /home/nginx/sbin/nginx # 查看 master pid ps -ef | grep nginx root 23712 1 0 21:21 ? 00:00:00 nginx: master process /home/nginx/sbin/nginx nobody 23715 23712 0 21:21 ? 00:00:00 nginx: worker process # 發送熱部署信號,這里 master pid 替換為自己查詢到的 kill -USR2 23712 # 查看當前 nginx 進程情況,27522 就是新的 master 進程 ps -ef | grep nginx root 23712 1 0 21:21 ? 00:00:00 nginx: master process /home/nginx/sbin/nginx nobody 23715 23712 0 21:21 ? 00:00:00 nginx: worker process root 27522 23712 0 21:41 ? 00:00:00 nginx: master process /home/nginx/sbin/nginx nobody 27524 27522 0 21:41 ? 00:00:00 nginx: worker process # 關閉舊的 worker kill -WINCH 23712 # 再次查看進程,可以發現舊的worker進程關閉了 ps -ef | grep nginx root 23712 1 0 21:21 ? 00:00:00 nginx: master process /home/nginx/sbin/nginx root 27522 23712 0 21:41 ? 00:00:00 nginx: master process /home/nginx/sbin/nginx nobody 27524 27522 0 21:41 ? 00:00:00 nginx: worker process
保留舊的 master 進程是為了在新的版本存在問題時,可以快速回退到原版本。如果發現問題要緊急回滾呢?
cp -f nginx.old nginx # 拉起舊版本的worker進程(-HUP 相當于 -s reload) kill -HUP old_master_pid # 讓新版本的 worker 不再接受請求 kill -USR2 new_master_pid # 關閉新版本的 woker 進程 kill -WINCH new_master_pid
如果確認無誤要退出老版本的 nginx,可以執行命令:
kill -QUIT old_master_pid
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40454.html
摘要:關于過程中如何細節控制一致性,穩定性,信號控制,控制等等,敬請期待小拽的進一步探索處理流程和模塊啟動進程后,請求在內部是如何流轉的,內部包括哪些模塊處理過程請求到達后首先讀取,中初始時間便從此開始。 由于性能問題,需要將 apache + php5.2 升級到 nginx + php7,對于nginx的性能和熱加載早有耳聞,why nginx so diao。小拽進行了初探,有任何疑問...
摘要:但是,隨著微服務架構的興起以及容器時代的到來,這種情況又再次加劇。最重要的是,在微服務與容器領域有很好的基礎,后期系統可完美實現微服務化與容器化。 1、Why Not PHP 使用PHP構建的WEB程序,隨著業務發展到一定體量之后,都不得不面臨以下一些問題: 業務功能不斷擴張,如何避免某單一業務功能故障影響整體,維持系統健壯性 業務邏輯復雜度不斷上升,如何解耦與模塊化,降低系統復雜性...
摘要:本文將結合馬蜂窩容器化平臺賦能前端應用構建的實踐經驗,介紹整個平臺背后的設計和實現原理,取得的一些效果及問題的優化方案。如果使用容器化平臺就不會出現這方面的擔憂。 容器對前端開發真的有用嗎?答案是肯定的。 最初當我向公司的前端同學「安利」容器技術的時候,很多人都會說:「容器?這不是用在后端的技術嗎?我不懂啊,而且前端開發用不上吧。」 showImg(https://segmentfau...
摘要:本文將結合馬蜂窩容器化平臺賦能前端應用構建的實踐經驗,介紹整個平臺背后的設計和實現原理,取得的一些效果及問題的優化方案。如果使用容器化平臺就不會出現這方面的擔憂。 容器對前端開發真的有用嗎?答案是肯定的。 最初當我向公司的前端同學「安利」容器技術的時候,很多人都會說:「容器?這不是用在后端的技術嗎?我不懂啊,而且前端開發用不上吧。」 showImg(https://segmentfau...
摘要:本文將結合馬蜂窩容器化平臺賦能前端應用構建的實踐經驗,介紹整個平臺背后的設計和實現原理,取得的一些效果及問題的優化方案。如果使用容器化平臺就不會出現這方面的擔憂。 容器對前端開發真的有用嗎?答案是肯定的。 最初當我向公司的前端同學「安利」容器技術的時候,很多人都會說:「容器?這不是用在后端的技術嗎?我不懂啊,而且前端開發用不上吧。」 showImg(https://segmentfau...
閱讀 3093·2021-11-22 09:34
閱讀 593·2021-11-22 09:34
閱讀 2437·2021-10-08 10:18
閱讀 3372·2021-09-22 15:57
閱讀 2585·2021-09-22 15:25
閱讀 2398·2019-08-30 15:54
閱讀 2093·2019-08-30 15:44
閱讀 1799·2019-08-29 11:18