0

我一直在研究運行一些Python代碼以接受TCP連接的EC2實例的可靠性。AWS負載均衡器健康檢查行爲

設置: 該腳本設置爲接受多個連接並進行一些處理併發回結果。來自ELB的平板被成功識別並且機器變得健康。

問題: 如果我模擬處理過程中僵局的無限循環中,坪被接受,但Python的服務器永遠不會關閉客戶端;它仍然在循環中。奇怪的是,雖然機器不能再接受任何連接,但實例被標記爲健康。我希望這臺機器不健康,因爲它不能再被其他人接受。

我想知道實例是否已經接受ping並且連接仍然打開的事實意味着「健康」的機器?或者如果有什麼可怕的事情發生在這裏?希望如何解決它!

在此先感謝。

回答

1

不,它只應該保持健康,如果服務器返回HTTP 200請求。它也將使用HTTP 1.1,保留與服務器的開放連接,而不是丟棄並重新創建它。剩餘健康指示ELB從您的服務器獲得200次ping響應的響應。

你確定python腳本參與了ping的響應嗎?請求的ping是什麼?我建議健康檢查測試您的應用程序以與生產請求類似的方式主動處理的URL。

故障排除文檔瀏覽:

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html

+0

的Python腳本接受來自坪的連接,通常會再次關閉連接,一旦它意識到它其實是一個平。 但是在死鎖模擬中它接受了ping,就是這樣。它不接受來自負載平衡器的更多連接,所以我不確定爲什麼該機器看起來健康。 – FintanH

+0

ELB維護連接並通過該現有連接發送後續請求,該腳本必須使用HTTP 200響應ELB健康檢查。您可以通過在相同條件下使用「nc」工具(在unix/linux上)連接到您的服務器並執行ELB運行狀況檢查發送的GET請求來手動測試。 – ColinSeligSmith

+0

但我不明白的是,如果腳本沒有做任何事情(字面意思是「while True:continue'),那麼爲什麼最初的請求不會超時? – FintanH