load-balancing - 如何在haproxy中使用数千个后端?新的 map 功能对此有用吗?

标签 load-balancing reverse-proxy haproxy

我想将haproxy用作数千个后端的代理和负载平衡器。因此,需要根据主机名将请求代理到正确的后端,然后在后端内进行负载均衡。我正在使用haproxy-1.5dev21。

配置文件如下所示:

frontend public
  bind :80
  mode http
  acl host1 hdr_reg(host) host1.com
  use_backend be_host1 if host1

  acl host4000 hdr_reg(host) host4000.com
  use_backend be_host4000 if host4000

backend be_host[n]
  server hostn_1
  server hostn_2

问题是,如果有5000台主机,则每个请求会增加30ms的延迟。对于2万个后端,haproxy需要花费很长时间来加载,更不用说每次请求的延迟带来的灾难了。

我可以做一些比顺序ACL规则更好的事情吗?
我尚未找到新 map 功能的示例-版本说明说它可以用于大量重定向规则。
我尝试了这个:
use_backend %[hdr(host), map(host_to_backend_map.file)]

上面在使用 map 时显然有些愚蠢,但是任何指导都将有所帮助。
谢谢!

最佳答案

在专家输入后,一些缺陷已从配置文件中删除,我在这里列出了这些缺陷,以防其他人发现它有用。

  • 使用 hdr(Host)代替 hdr_reg()。这极大地缩短了评估ACL所花费的时间。更好的是,避免ACL并使用内联评估,例如
    use_backend host1 if { req.fhdr(host,1) -m str host1.domain.com }
  • 使用 nbproc> 1 。在并发连接的情况下,这会有所帮助。虽然这使调试变得困难。
  • 对于后端,请直接使用IP地址,而不要使用“服务器hostn_1 dns_of_server:port_number”
  • 将' fullconn 1000 '放入默认值部分。这极大地改善了加载时间。

  • 最后,使用最新的haproxy git checkout并观察加载时间的增加。它下降了很多。现在的秒数为数秒,而之前为数分钟。

    此外,关于“ map ”功能,正在开发一种新的动态use_backend方案,该方案应消除编写尽可能多的ACL的需要。

    关于load-balancing - 如何在haproxy中使用数千个后端?新的 map 功能对此有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025412/

    相关文章:

    docker - GCP 负载平衡器 : 502 Server Error, "failed_to_connect_to_backend"

    ssl - 使用 HAProxy 每个域使用多个 SSL 证书

    spring-mvc - nginx 反向代理 "ip address shows"

    nginx - 如何在 jwilder/nginx-proxy 中监听 443 端口

    php - Ratchet 多台服务器

    logstash - 当 URL 包含无效字符时,有什么方法可以解析 URIPATHPARAM

    java - 使用 Nginx 时缺少 HTTP 状态代码名称

    events - 分布式调用刷新 umbraco 7 中的缓存后引发事件

    multithreading - Work Stealing 总是最合适的用户级线程调度算法吗?

    http - HTTP负载均衡下的TCP连接和流量路由