haproxy tcp roundrobin 负载平衡未按预期工作

Kei*_*ler 4 haproxy

我是 haproxy 的新手,并将其用于 rsyslog 日志到 ArcSight 连接器的 TCP 负载平衡。在我的一生中,我无法让流量在池中的所有节点之间均匀平衡(这是所需的行为)。我已经尝试了很多权重和 maxconn 的排列都无济于事。

感觉这应该是一个简单的问题,但是每个池节点的行为非常混乱。此外,由于大多数人使用 haproxy 进行 http 负载平衡,因此我发现关于我正在尝试做的事情的最佳方法的文档很少。

任何人都可以推荐任何见解、经过验证的配置或故障排除步骤?

谢谢!

这是我们当前的配置:

global
    log 127.0.0.1       local0
    log 127.0.0.1       local1 notice
    maxconn 256000
    user haproxy
    group haproxy
    spread-checks 5
    daemon
    quiet

defaults
    log global
    option dontlognull
    option redispatch
    option allbackups
    maxconn 256000
    timeout connect 5000

listen stats :1936
    mode http
    stats enable
    stats realm Haproxy\ Statistics
    stats uri /
    stats auth admin:savetheday

frontend rsyslog_netscreen
    bind 127.0.0.1:8514
    mode tcp
    option tcplog
    option contstats
    option tcpka
    default_backend rsyslog_netscreen_backend

backend rsyslog_netscreen_backend
    balance roundrobin
    mode tcp
    option tcpka
    option srvtcpka
    server netscreen1 localhost:9515 weight 1 maxconn 1024 check
    server netscreen2 localhost:9516 weight 1 maxconn 1024 check
    server netscreen3 localhost:9517 weight 1 maxconn 1024 check
    server netscreen4 localhost:9518 weight 1 maxconn 1024 check
    server netscreen5 localhost:9519 weight 1 maxconn 1024 check
    server netscreen6 localhost:9520 weight 1 maxconn 1024 check
Run Code Online (Sandbox Code Playgroud)

Fel*_*ank 7

请注意,这roundrobin不是实现均匀负载的好策略。它将确保每个后端随着时间的推移接收相同数量的连接,但不关心每个连接持续多长时间。

在您stats看来,很明显每个后端服务器的会话总数几乎相等(如果它们的正常运行时间相等)。不过,当前会话的数量可能会有很大差异。

我们发现使用leastconn而不是roundrobin产生更均匀的负载。这是有道理的,因为碰巧与许多保持连接的长期客户端卡住的服务器不需要承受新的传入连接的负担。