我知道在服务器满载的情况下,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。