我有一個ELB設置爲12秒,2部署通過更換EC2實例
健康/不健康閾值的間隔目前我部署過程是:
1)啓動新服務器 2)當他們是健康的,用新的EC2取代ELB背後的現有EC2。
它似乎與零停機時間一起工作。但是我無法找到關於ELB在特定情況下如何正確地做事情的任何信息。任何人都知道這是否是零時差部署的好方法?
Thx。
Henrik
我有一個ELB設置爲12秒,2部署通過更換EC2實例
健康/不健康閾值的間隔目前我部署過程是:
1)啓動新服務器 2)當他們是健康的,用新的EC2取代ELB背後的現有EC2。
它似乎與零停機時間一起工作。但是我無法找到關於ELB在特定情況下如何正確地做事情的任何信息。任何人都知道這是否是零時差部署的好方法?
Thx。
Henrik
每次部署新機器都是一個好主意。特別是如果您是符合PCI標準的公司並每週刷新您的機器,它將消除大量審計標準,從而顯着簡化您的基礎架構。更簡單的方法是爲新部署創建一個新的AutoScaling組。新機器將在新的自動縮放組中啓動。自動縮放組可以附加到您選擇的ELB上。然後確保您的健康檢查是ELB在每臺服務器上點擊的端點。如果服務器已準備好/能夠響應請求,那麼該端點以200響應。準備就緒後,他們將自動開始提供流量,並且只需要殺死由較早部署創建的自動調節組,以殺死機器並將其從ELB中移除。有2個嚴重的問題需要考慮這都涉及到機器無狀態:
機的正常終止:您需要確保服務的Web請求的過程中死了,就完成響應任何建立的客戶端連接,否則後用戶將看到一個50倍的錯誤代碼;同樣,如果你在syslog,splunk,sumologix之類的地方轉發你的日誌,你還需要確保在你終止實例之前轉發它們;
要沒有粘性會話/會話親和力。如果您在本地在這些服務器上存儲Web應用程序的用戶會話,則可能會有粘性會話。這通常是一個壞主意,因爲現在每臺機器都有一個狀態,負載可能不均衡。因此,使用像reddis/memcache一樣的會話存儲的中央/共享位置並禁用粘性會話;
執行上述兩項操作後,您的部署方法將變得最清晰。
如果服務器託管Web應用程序,那麼用戶會話呢? 一個更好的辦法,在我看來,應該利用現有的情況來部署,通過capistrano或同等工具,並使用memcache存儲會話和其他短壽命DATAS。
我認爲你的方法很好。關鍵是確保新實例在刪除舊實例之前對請求做出響應。這種方法的好處在於,如果需要,您可以非常輕鬆地進行回滾。
有很多不同的方法來解決這個問題。我可能會看到這個與正在更新的運行實例之間的混合,但這取決於您的基礎架構的複雜程度以及您部署的頻率。
就跨小型艦隊小型升級,更新是可控的,但你仍然需要弄清楚如何處理回滾。一旦你超越了幾臺服務器,這變得更加複雜。
如果你的車隊足夠大,而且你正在使用自動縮放,那麼你可以更新你的規則,並開始殺死舊的實例,讓AS帶上新的實例。
謝謝。由於我問了這個問題,我已經設置了一個完全按照你的建議進行部署的腳本(創建新的自動縮放組等)。當新部署通過負載均衡器回覆OK時,我從ELB註銷所有舊的實例,然後殺死舊的自動調整組。 – hmrdk