我正在尝试将 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 平衡被推荐用于,但如果它会失去平衡,它对我来说根本不起作用。
有什么建议吗?
我不确定这是否很有帮助,但我在同样的问题上遇到了一些困难 - 这就是我的结论;
正如您已经建立的那样,基于哈希的负载平衡永远不会为您提供完美的负载平衡。您看到的行为可以简单地通过在同一台服务器上拥有一些访问量最大/最大的页面来解释 - 通过具有获得大量流量的少数页面和获得很少流量的许多页面,这将足以歪曲统计数据。
您的配置是使用一致的散列。ID 和服务器权重决定了散列条目将被定向到的最终服务器 - 这就是您的平衡受此影响的原因。文档非常清楚,即使这是平衡缓存的好算法 - 它可能需要您更改 ID 并增加服务器的总权重以获得更均匀的分布。
如果您获取大量唯一地址样本(超过 1000 个),并且您一次访问这些地址中的每一个 - 您应该看到三个后端的会话计数器比允许“普通”流量对平衡器,因为这也受站点流量模式的影响。
我的建议是确保您对整个 URL 进行哈希处理,而不仅仅是“?”左侧的内容。这是通过balance uri whole
在配置中使用来控制的。参考 haproxy 文档。如果您有很多 URL 具有相同的基础,但具有不同的 GET 参数 - 这肯定会给您带来更好的结果。
我还会考虑负载平衡如何影响缓存服务器的容量。如果它不会以任何方式有效地影响冗余 - 我不会太担心它,因为获得完美的负载平衡不是您可能通过 URI 散列实现的目标。
我希望这有帮助。
归档时间: |
|
查看次数: |
3180 次 |
最近记录: |