ima*_*ive 5 networking load-balancing tcp haproxy
我有一个应用程序,其中客户端通过基于 TLS/SSL 的简单基于 TCP 的协议连接到服务器。在开发中,当我们构建应用程序时,这已经运行了好几个月。最近,当我们准备发布时,我继续将 HAProxy 添加到组合中,以促进负载分配的某些顺序。从技术上讲,一切正常,但问题是,客户端现在看到的是完全随机的超时。它们通常不一致,但发生在大约 60 秒时。有时它会在 25 秒后发生。haproxy 将 TCP 连接转发到通知并完全断开连接的服务器,问题是您不希望一堆同时发生的连接无故中断并一遍又一遍地重新连接。除了其他方面,这对我们的发布/订阅基础设施也有影响。客户端足够聪明,可以立即重新连接——但这不是我们想要的行为。负责通过 SSL 接受这些 TCP 连接的服务器不需要保持活动状态。我将继续假设有一些我在我的 HAProxy 配置中没有看到的隐式值导致这些随机超时,或者需要 TCP 保持活动的东西。然而,超时并不总是一致的事实让我怀疑。如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:客户端足够聪明,可以立即重新连接——但这不是我们想要的行为。负责通过 SSL 接受这些 TCP 连接的服务器不需要保持活动状态。我将继续假设有一些我在我的 HAProxy 配置中没有看到的隐式值导致这些随机超时,或者需要 TCP 保持活动的东西。然而,超时并不总是一致的事实让我怀疑。如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:客户端足够聪明,可以立即重新连接——但这不是我们想要的行为。负责通过 SSL 接受这些 TCP 连接的服务器不需要保持活动状态。我将继续假设有一些我在我的 HAProxy 配置中没有看到的隐式值导致这些随机超时,或者需要 TCP 保持活动的东西。然而,超时并不总是一致的事实让我怀疑。如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:负责通过 SSL 接受这些 TCP 连接的 s 不需要保持活动状态。我将继续假设有一些我在我的 HAProxy 配置中没有看到的隐式值导致这些随机超时,或者需要 TCP 保持活动的东西。然而,超时并不总是一致的事实让我怀疑。如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:负责通过 SSL 接受这些 TCP 连接的 s 不需要保持活动状态。我将继续假设有一些我在我的 HAProxy 配置中没有看到的隐式值导致这些随机超时,或者需要 TCP 保持活动的东西。然而,超时并不总是一致的事实让我怀疑。如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:如果每次都是 60 秒,我就会确信这是一个配置问题。在这种特殊情况下,并不总是 60 秒。这是我的配置现在的样子:
global
stats socket /home/haproxy/status user haproxy group haproxy
log 127.0.0.1 local1 info
# log 127.0.0.1 local5 info
maxconn 4096
ulimit-n 8250
# typically: /home/haproxy
chroot /home/haproxy
user haproxy
group haproxy
daemon
quiet
pidfile /home/haproxy/haproxy.pid
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 60000
srvtimeout 60000
# Configuration for one application:
# Example: listen myapp 0.0.0.0:80
listen www 0.0.0.0:443
mode tcp
balance leastconn
# Example server line (with optional cookie and check included)
# server srv3.0 10.253.43.224:8000 srv03.0 check inter 2000 rise 2 fall 3
# Status port (by default, localhost only...for debugging purposes)
server ANID3 10.0.1.2:8888 check inter 3000 rise 2 fall 3 maxconn 500
server ANID1 10.0.1.3:8888 check inter 3000 rise 2 fall 3 maxconn 500
server ANID2 10.0.1.4:8888 check inter 3000 rise 2 fall 3 maxconn 500
listen health 0.0.0.0:9999
mode http
balance roundrobin
stats uri /haproxy-status
Run Code Online (Sandbox Code Playgroud)
我通过让我们的客户端绕过它并直接转到一个没有超时并且一切都很好的应用服务器来验证 HAProxy 是问题所在。一旦我将它路由到我们的两个 haproxy 服务器之一,随机断开连接就会发生在 25-60 秒之间。
感谢您查看此内容。这很令人沮丧,但我确信这是因为我对 HAProxy 对我的客户的期望缺乏了解。
你能测试一下吗:
defaults
timeout client 60000
option http-server-close
Run Code Online (Sandbox Code Playgroud)
而不是 clitimeout option http-server-close
,:
设置“option http-server-close”会在服务器端启用 HTTP 连接关闭模式,同时保持在客户端支持 HTTP keep-alive 和管道的能力。
http://cbonte.github.io/haproxy-dconv/2.3/configuration.html#option%20http-server-close
归档时间: |
|
查看次数: |
8191 次 |
最近记录: |