HAproxy 循环平衡似乎分布不均匀

HAproxy 循环平衡似乎分布不均匀

我知道在服务器满载的情况下,HAproxy(1.4.4)中的循环调度不会均匀分布,但我的服务器目前没有流量(测试设置),循环调度平衡会 www1,www1,www1,www1,...www2,www2,www2,...,www1...

我通过在每个服务器上运行脚本 cat /etc/HOSTNAME (slackware) 来验证这一点。每次我都需要来回切换以测试一些会话内容(存储在共享 memcached 中),但每次请求时我都无法在两个 Web 服务器之间切换。

global
    log     127.0.0.1 local0 warning
    maxconn     4096
    chroot      /usr/share/haproxy
    pidfile     /var/run/haproxy.pid
    uid     99
    gid     99
    daemon

defaults
    balance     roundrobin
    fullconn    100
    maxconn     4096
    mode        http
    option      dontlognull
    option      http-server-close
    option      forwardfor
    option      redispatch
    retries     3
    timeout     connect 5000
    timeout     client  20000
    timeout     server  60000
    timeout     queue   60000
    stats       enable
    stats       uri /haproxy
    stats       auth ***:***

frontend www *:80
    log     global
    acl     is_upload hdr_dom(host) -i uploads.site.com
    acl     is_api hdr_dom(host) -i api.site.com
    acl     is_dev hdr_dom(host) -i dev.site.com
    use_backend uploads.site.com if is_upload
    use_backend api.site.com if is_api
    use_backend dev.site.com if is_dev
    default_backend site.com

backend site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend api.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:api.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend dev.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:dev.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend uploads.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:uploads.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 backup weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

因此,基本上,我有一些不同的后端(我已验证 ACL 正在工作),选择了默认选项“roundrobin”。我尝试删除权重,删除所有服务器(不仅仅是我正在测试的后端)的 minconn/maxconn/fullconn 属性,尝试删除 ACL 等。顺便说一句,我一直在 dev.site.com 上进行测试。

有谁知道为什么我无法获得像 www1、www2、www1、www2、... 这样的信息?此外,这是我在这里提出的第一个问题,所以如果我在帖子中遗漏了任何需要的信息,请告诉我。

谢谢!

答案1

您一定要观察预期的负载。我怀疑您的某些服务器经常无法响应健康检查,并且它们经常被从服务器群中拉出,然后在负载下降后重新插入,然后它们可以再次响应。

另外,您如何观察不平衡?日志仅记录警告(基本上只有宕机)。

您还可以检查统计页面,您将看到向每个服务器发送了多少个会话,它们启动/关闭了多少次,以及是否存在排队,或者至少它们是否已达到其 maxconn。

相关内容