Haproxy
您根據什麼標準調整 HA 代理配置中的超時?
配置 HA 代理時,您如何決定為超時分配哪些值?我已經閱讀了各種部落格中的六個範例,每個人都使用不同的超時,沒有人討論為什麼。
HAProxy 似乎特別擔心客戶端、連接和伺服器,如果您完全未設置,HAPRoxy 會發出警告:
While not properly invalid, you will certainly encounter various problems with such a configuration. To fix this, please ensure that all following timeouts are set to a non-zero value: 'client', 'connect', 'server'.
該文件在這方面沒有幫助:它建議“略高於 3 秒的倍數”,但不是為什麼您選擇 1 與 100 或 42 的倍數。
我使用的 RPM(Amazon Linux 儲存庫)設置了以下預設值:
timeout connect 10s timeout client 1m timeout server 1m
其中兩個是3 秒的精確倍數,違反了我見過的唯一官方建議。
如果您沒有具體的調整建議,也許一個更簡單的問題是:如果超時時間很短或很長,我應該會出現什麼問題?
TCP RTO(接收超時)從三秒開始。( RFC 1122 ) 如果傳輸的數據包在那段時間內沒有返回確認,則假定它失去並重新傳輸。這幾乎肯定是作者所指的。(請注意,RTO 會通過各種算法動態調整,超出了本問題的範圍。)
請記住,這實際上只適用於您的前端伺服器和客戶端(即網路使用者)之間的連接。在正常情況下,HAProxy 和您的後端伺服器之間的連接應該在 LAN 上,並且您應該使用更短的超時,以便故障後端盡快停止服務。
對於您的網路使用者,他們中的一些人可能處於非常高延遲的連接上,例如衛星連接,因此可能會遇到比正常重傳更高的情況。即使一切正常,使用衛星的連接上的 RTT 也可能超過 2000 毫秒。
考慮到這一切,您通常需要非常短的超時
timeout connect
和非常長的超時timeout client
。對於
timeout server
,這取決於您的 Web 應用程序。設置超時時,請考慮所服務的 Web 應用程序的複雜性,以及在最壞的情況下處理複雜請求可能需要多長時間。如有疑問,請提高價值。