我正在尝试将 HAProxy 1.4.22 与 URI 平衡和哈希类型一致用于 3 个清漆缓存后端之间的负载平衡。我的理解是,这永远不会在服务器之间实现完美平衡,但它应该比我看到的结果要好。
我的 HAproxy 配置的相关部分如下所示:
backend varnish
# hash balancing
balance uri
hash-type consistent
server varnish1 10.0.0.1:80 check observe layer7 maxconn 5000 id 1 weight 75
server varnish2 10.0.0.2:80 check observe layer7 maxconn 5000 id 2 weight 50
server varnish3 10.0.0.3:80 check observe layer7 maxconn 5000 id 3 weight 50
Run Code Online (Sandbox Code Playgroud)
我一直在通过将我自己的主机文件指向新的代理服务器来进行自我测试,我什至尝试将流行的主页重新路由到一个单独的后端,该后端是平衡循环的,以从散列平衡后端中去除异常值,这似乎工作正常。作为测试,我将 varnish1 的权重提高到 75,但这似乎没有帮助。我的负载非常不成比例,我不明白为什么会这样。


一个有趣的花絮是,如果我反转 ID,更高的 ID 将始终获得最大份额的流量。为什么 ID 会影响平衡?
调整权重很好,但随着我网站的流量模式发生变化(我们是一个新闻网站,最受欢迎的帖子可能会迅速变化),我不想经常调整权重。我知道它永远不会达到完美的平衡,但我期待比让一台重量较低的服务器获得比另一台重量较高的服务器多 25 倍的连接更好的结果。
我的目标是通过减少缓存级别的重复来减少数据库和应用程序服务器负载,HAproxy URI 平衡被推荐用于,但如果它会失去平衡,它对我来说根本不起作用。
有什么建议吗?