我正面臨一個有趣的問題。我們運行基於狀態的基於HTTPS的應用程序。狀態基於會話cookie進行維護。應用程序的設計方式是,如果會話突然終止,應用程序將恢復到主屏幕,任何未保存的數據都將丟失。所以對我們來說保持會話非常重要。ELB是基於tcp的排空嗎?
過去的一些觀點決定爲此使用AWS服務,而當前體系結構具有ELB,可將負載平衡到自動縮放組。使用的第一個體系結構啓用了基於HTTP的粘性會話。在測試過程中發現,縮小現有會話時會立即關閉並重新路由到可用實例。即使在啓用排水(5分鐘的時間)之後也會發生這種情況,根據文件應該防止這種情況發生。有人能告訴我我們做錯了什麼,這是否是這樣的假設工作?
我的第二個問題是,當使用ELB來平衡基於tcp連接的負載時,我們發現情況並非如此。在這種情況下,當我們縮減舊的tcp連接時,它會一直保持到它關閉或超時,並且新連接被路由到其他實例。這是我們正在使用的當前設置。所以我的問題是爲什麼ELB在這兩種情況下表現不同,並且有什麼方法可以讓ELB使用基於tcp連接的HTTP粘性會話和流失?
如果您確實有答案,請與配置詳細信息分享。謝謝。
「保持現有的連接開放」是指在現有的TCP連接保持活力,只要它們不被任何一方的權利關閉。但是當我們測試時,這不是正在發生的事情。我們在HTTP請求上保持活躍狀態,並且在我們針對獨立服務器進行測試時,客戶端和服務器都保持tcp連接處於打開狀態。但是ELB只是關閉連接,儘管啓用了消耗並且使用基於應用程序的會話粘性。 – 2015-02-10 17:47:27
默認情況下,ELB將連接保持連接60秒,以連接到您的客戶端和後端。您可以隨時更改該值,並指定1到3600秒之間的任何值。如果您在後端指定保持活動狀態,並且希望負載平衡器負責關閉連接,則必須使用比保持活動狀態的值更低的值配置ELB空閒超時 – 2015-02-10 21:15:27
連接耗盡與連接保持活動無關。保持活躍是一種網絡優化,可避免爲每個HTTP請求打開TCP連接的開銷。連接耗盡是關於當要從負載平衡器移除實例時保持用戶連接,以避免中斷正在進行的客戶HTTP連接。最後,HTTP會話僅在應用程序級別可見,並且從ELB不可見(只有會話cookie在ELB的HTTP模式下工作時) – 2015-02-10 21:19:48