120 秒后 HAProxy 超时
HAProxy timeout after 120 seconds
我使用 HAProxy 做了一个负载均衡器。我的连接最多可能需要 1-4 分钟,因此我将 HAProxy 中的默认超时值增加到 300 秒,如下所示:
global
daemon
log 127.0.0.1 local0 notice
maxconn 2000
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
timeout connect 300s
timeout client 300s
timeout server 300s
option http-keep-alive
frontend LOAD_BALANCER_TIER
bind *:80
default_backend WEB_SERVER_TIER
backend WEB_SERVER_TIER
balance leastconn
mode tcp
server segmentingApi01 some_private_ip:7331 check tcp-ut 300000
server segmentingApi02 some_private_ip:7331 check tcp-ut 300000
server segmentingApi03 some_private_ip:7331 check tcp-ut 300000
如您所见,我什至在 server
选项中增加了 TCP 连接。然而,我对负载均衡器的请求恰好在 120 秒后超时。请注意,我认为问题出在负载平衡器上,因为当我直接向服务器 (some_private_ip:7331
) 发送请求时,它不会超时。
我想知道是否有人可以帮助我。
首先,我不认为 "redispatch" 和 "http-keep-alive" 在 tcp 模式下工作 - 因为 haproxy 不处理 tcp 模式下的应用程序 (http) 信息。
也许你应该 "option tcpka" 试一试。这确实使 TCP 保持活动状态,因此 OS 不会在没有数据交换时取消连接 - 我猜这是在这里发生的。
您不应将连接超时设置为如此高的值,因为此超时用于与服务器建立初始连接。
我使用 HAProxy 做了一个负载均衡器。我的连接最多可能需要 1-4 分钟,因此我将 HAProxy 中的默认超时值增加到 300 秒,如下所示:
global
daemon
log 127.0.0.1 local0 notice
maxconn 2000
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
timeout connect 300s
timeout client 300s
timeout server 300s
option http-keep-alive
frontend LOAD_BALANCER_TIER
bind *:80
default_backend WEB_SERVER_TIER
backend WEB_SERVER_TIER
balance leastconn
mode tcp
server segmentingApi01 some_private_ip:7331 check tcp-ut 300000
server segmentingApi02 some_private_ip:7331 check tcp-ut 300000
server segmentingApi03 some_private_ip:7331 check tcp-ut 300000
如您所见,我什至在 server
选项中增加了 TCP 连接。然而,我对负载均衡器的请求恰好在 120 秒后超时。请注意,我认为问题出在负载平衡器上,因为当我直接向服务器 (some_private_ip:7331
) 发送请求时,它不会超时。
我想知道是否有人可以帮助我。
首先,我不认为 "redispatch" 和 "http-keep-alive" 在 tcp 模式下工作 - 因为 haproxy 不处理 tcp 模式下的应用程序 (http) 信息。
也许你应该 "option tcpka" 试一试。这确实使 TCP 保持活动状态,因此 OS 不会在没有数据交换时取消连接 - 我猜这是在这里发生的。
您不应将连接超时设置为如此高的值,因为此超时用于与服务器建立初始连接。