HAProxy——负载分布不均匀

HAProxy——负载分布不均匀

我目前正在测试 haproxy 来平衡我们新闻通讯的负载。我们为客户创建个性化新闻通讯。

为此,我们使用两台网络服务器(相同的机器)和一个“邮件引擎”。邮件引擎会调用网络服务器,然后返回个性化的 html 新闻稿。

现在的问题是,一个 Web 服务器的 CPU 负载约为 75%,而另一个仅运行 15%。测试时查看“会话速率”,两个服务器的“会话速率 -> 当前”始终在 3 到 4 之间。

但是当查看“会话”时,这里“会话 -> 当前”总共有 10,Web 服务器 1 的“当前”为 8,而另一个 Web 服务器有 0 到 2 个。

为什么第一个 Web 服务器上有 8 个会话,而另一个上只有 0-2 个?

这是我的配置:

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5000
        timeout client  50000
        timeout server  50000

listen mailgenerator 10.46.70.75:80
        mode http
        stats enable
        balance roundrobin
        option httpclose
        option forwardfor
        option httpchk HEAD /robots.txt
        server mail1 192.168.70.11:80 check weight 100
        server mail2 192.168.70.12:80 check weight 100

答案1

如果您使用轮询,则无论负载如何,连接都会在到达时均匀分布。因此,如果您的服务器或进程较慢,它可以在一个服务器上建立队列,而另一个服务器则处于空闲状态。

如果您使用 leastconn 平衡并设置每个服务器的较低 maxconn 以使连接在 haproxy 中排队而不是在每个服务器上排队,则可以获得更均匀的分布。

答案2

对于 http,当前会话数意义不大。会话总数和 LbTot 更能体现服务器的平衡情况。如果这些数字相当均匀,则可能是某台服务器的某些问题导致其处理请求的速度变慢,从而增加了负载。

相关内容