Deployment
dpkg/apt-get 更新軟體包 - 停機時間?
我想知道 apt-get/dpkg 軟體包(.deb’s)是否在更新時管理停機時間?
例如,當通過 更新
nginx
(假設它已經安裝)時sudo apt-get install nginx
,在我看來沒有任何停機時間。如果這是真的,我想將這種能力轉移到通過 deb 文件部署 PHP 應用程序。我通常會進行 Capistrano 風格的部署(建構站點,將其放到 Web 伺服器上,然後通過符號連結將舊程式碼與新程式碼交換)。
相反,如果我使用 .deb 包安裝建構的應用程序,我是否還應該使用符號連結策略來最大程度地減少停機時間,或者是否會以已經最小化這種方式的方式安裝/更新包?
假設 .deb 包只是替換程式碼文件,然後呼叫安裝後腳本來重新載入應用程序網關(php-fpm、gunicorn、unicorn、phusion,無論應用程序網關是什麼)。
Debian 軟體包並不專門“管理”停機時間。通常,軟體包將:
- 解包新版本包前先停止服務,解包後重新啟動;或者
- 解包新版本的包後觸發停止/啟動(或重新啟動)循環。
他們選擇哪一個取決於很多事情,包括自從編寫或審查包維護腳本以來多久,包是否提供其他輔助文件,如果舊版本的程序讀取更新的文件,會搖搖晃晃(動態-可載入的模組、更改的文件格式和你有什麼),以及包維護者是否知道他們在做什麼。
不過,所有這些在很大程度上與您的情況無關,因為您是編寫維護者腳本的人,因為它是您的包,因此您可以以任何您認為合適的方式進行操作。但是,沒有涉及重新啟動服務(而不是觸發某種優雅的重新載入)的策略,它不會有一段時間服務不可用。在這種情況下,正確的解決方案是提供某種冗餘,無論是兩台獨立的機器(一次更新一台),還是在一台機器上執行的服務的兩個獨立副本(再次更新一個一次)。