我想将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 时显然有些愚蠢,但是任何指导都将有所帮助。
谢谢!
最佳答案
在专家输入后,一些缺陷已从配置文件中删除,我在这里列出了这些缺陷,以防其他人发现它有用。
use_backend host1 if { req.fhdr(host,1) -m str host1.domain.com }
最后,使用最新的haproxy git checkout并观察加载时间的增加。它下降了很多。现在的秒数为数秒,而之前为数分钟。
此外,关于“ map ”功能,正在开发一种新的动态use_backend方案,该方案应消除编写尽可能多的ACL的需要。
关于load-balancing - 如何在haproxy中使用数千个后端?新的 map 功能对此有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025412/