2014-09-29 82 views
1

我有一個基於TCP的應用程序,它的功能依賴於TCP保持活動行爲。我想使用haproxy來代理和負載平衡這個應用程序。支持haproxy中的TCP_KEEPCNT功能?

除了應用程序依賴TCP keepalive行爲之外,使用haproxy的一切看起來都很好。應用程序依賴TCP_KEEPCNT套接字選項來關閉連接,當一定數量的keepalive尚未得到答覆時。看起來這個功能在haproxy中不可用,因此應用程序圍繞連接狀態的功能是錯誤的。

haproxy是否可能影響連接上的TCP_KEEPCNT設置,或者TCP_KEEPIDLE和TCP_KEEPINTVL等相關選項?謝謝!

回答

1

您可以啓用使用下列選項中HAProxy的TCP保活包的發送:

  • option clitcpka - 使客戶和HAProxy的之間的keepalive包的發送,在前端
  • option srvtcpka使用 - 啓用haproxy和後端服務器之間的keepalive包發送,用於後端

注意儘管您不能一直髮送keepalive包fr om後端服務器到客戶端。這是因爲HAProxy總是有兩個獨立的TCP連接:一個在客戶端和HAProxy之間,另一個在HAProxy和服務器之間。由於Keepalive軟件包未到達應用程序,但完全由TCP堆棧(以及內核)處理,因此它們不能由應用程序轉發。

+0

我意識到,但是我有興趣能夠控制Keepalive的行爲,一旦啓用。 – zdv 2014-10-01 19:37:21

0

隨着option clitcpkaoption srvtcpkaoption tcpka非活動連接被檢測到並且通過殺死OS,而不是由HAProxy的。我沒有辦法在haproxy 1.5.x上調整它。

sysctl net.ipv4.tcp_keepalive_time=110 # if no data sent for 110 seconds, enable KA, then immediately send the first KA, don't kill connection yet 
sysctl net.ipv4.tcp_keepalive_intvl=30 # wait for 30 seconds after each KA, once they're enabled 
sysctl net.ipv4.tcp_keepalive_probes=3 # send 3 KAs unacknowledged, then kill the TCP connection 

當數據包停止傳輸時,這些操作系統設置在200秒後共同終止連接。