2014-01-31 104 views
0

我有一個ELB設置爲12秒,2部署通過更換EC2實例

健康/不健康閾值的間隔目前我部署過程是:

1)啓動新服務器 2)當他們是健康的,用新的EC2取代ELB背後的現有EC2。

它似乎與零停機時間一起工作。但是我無法找到關於ELB在特定情況下如何正確地做事情的任何信息。任何人都知道這是否是零時差部署的好方法?

Thx。

Henrik

回答

0

每次部署新機器都是一個好主意。特別是如果您是符合PCI標準的公司並每週刷新您的機器,它將消除大量審計標準,從而顯着簡化您的基礎架構。更簡單的方法是爲新部署創建一個新的AutoScaling組。新機器將在新的自動縮放組中啓動。自動縮放組可以附加到您選擇的ELB上。然後確保您的健康檢查是ELB在每臺服務器上點擊的端點。如果服務器已準備好/能夠響應請求,那麼該端點以200響應。準備就緒後,他們將自動開始提供流量,並且只需要殺死由較早部署創建的自動調節組,以殺死機器並將其從ELB中移除。有2個嚴重的問題需要考慮這都涉及到機器無狀態:

  1. 機的正常終止:您需要確保服務的Web請求的過程中死了,就完成響應任何建立的客戶端連接,否則後用戶將看到一個50倍的錯誤代碼;同樣,如果你在syslog,splunk,sumologix之類的地方轉發你的日誌,你還需要確保在你終止實例之前轉發它們;

  2. 要沒有粘性會話/會話親和力。如果您在本地在這些服務器上存儲Web應用程序的用戶會話,則可能會有粘性會話。這通常是一個壞主意,因爲現在每臺機器都有一個狀態,負載可能不均衡。因此,使用像reddis/memcache一樣的會話存儲的中央/共享位置並禁用粘性會話;

執行上述兩項操作後,您的部署方法將變得最清晰。

+0

謝謝。由於我問了這個問題,我已經設置了一個完全按照你的建議進行部署的腳本(創建新的自動縮放組等)。當新部署通過負載均衡器回覆OK時,我從ELB註銷所有舊的實例,然後殺死舊的自動調整組。 – hmrdk

0

如果服務器託管Web應用程序,那麼用戶會話呢? 一個更好的辦法,在我看來,應該利用現有的情況來部署,通過capistrano或同等工具,並使用memcache存儲會話和其他短壽命DATAS。

+0

會話已在memcache中處理。所以網絡服務器是無狀態的。我喜歡從構建工件引導新服務器的方法。一切都是腳本化的,所以自動縮放等是可能的。 – hmrdk

+0

我明白了。因此,從ELB中刪除舊實例,並讓CloudWatch通過一些自定義規則來殺死該實例。這樣,您就可以在舊實例中完成運行請求。 –

+0

我在計劃舊服務器在他們注意到它們不是最新部署的構建版本時發生「自殺」,並且工作隊列爲空。 我的問題是關於ELB如何註銷舊服務器池並在控制檯或API的一次調用中註冊新服務器池時的反應。 – hmrdk

0

我認爲你的方法很好。關鍵是確保新實例在刪除舊實例之前對請求做出響應。這種方法的好處在於,如果需要,您可以非常輕鬆地進行回滾。

有很多不同的方法來解決這個問題。我可能會看到這個與正在更新的運行實例之間的混合,但這取決於您的基礎架構的複雜程度以及您部署的頻率。

就跨小型艦隊小型升級,更新是可控的,但你仍然需要弄清楚如何處理回滾。一旦你超越了幾臺服務器,這變得更加複雜。

如果你的車隊足夠大,而且你正在使用自動縮放,那麼你可以更新你的規則,並開始殺死舊的實例,讓AS帶上新的實例。