Haproxy 在清漆前还是相反?

Posted

技术标签:

【中文标题】Haproxy 在清漆前还是相反?【英文标题】:Haproxy in front of varnish or the other way round? 【发布时间】:2013-03-05 02:23:27 【问题描述】:

我可以想象两种设置:

负载平衡然后缓存

                          +-- Cache server #1 (varnish) -- App server #1
                         /
Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2
                         \
                          +-- Cache server #3 (varnish) -- App server #3

缓存然后负载平衡

                                                       +-- App server #1
                                                      /
Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2
                                                      \
                                                       +-- App server #3

第一种设置的问题是有多个缓存,这样会浪费很多内存,并使缓存失效更加复杂。

第二个设置的问题是可能存在性能损失和两个单点故障(varnish 和 haproxy),而不仅仅是一个(haproxy)?

我很想使用第二种设置,因为 haproxy 和 varnish 都应该是快速和稳定的:你的意见是什么?

【问题讨论】:

【参考方案1】:

几年前我为一个繁忙的 Web 应用程序构建了一个类似的设置(只是我使用 Squid 而不是 Varnish),并且效果很好。

我建议使用您的第一个设置(HAProxy -> Varnish)并进行两项修改:

    使用 keepalived 和共享虚拟 IP 添加辅助 HAProxy 服务器 使用balance uri 负载平衡算法优化缓存命中

优点:

HAProxy (x2) 和 Varnish (x3) 冗余让您高枕无忧 使用 HAProxy URI 负载平衡选项提高 Varnish 的命中率效率 缓存服务器的性能更好,因为它们不需要在内存中保留太多 使缓存失效更容易,因为相同的 URI 每次都会转到相同的服务器

缺点:

URI 平衡运行良好,但如果缓存服务器出现故障,您的后端服务器将受到打击,因为从更新的 URI 平衡哈希中提取松弛的其他缓存服务器将需要重新检索缓存的数据.也许不是什么大骗局,但我确实必须为我的系统记住这一点。

【讨论】:

但 URI 平衡似乎意味着:1)我不能对那些没有缓存的项目进行任何其他平衡(例如基于工作负载的平衡)并且 但似乎 URI 平衡意味着我不能对那些未缓存的项目进行任何其他平衡(例如基于工作负载的平衡)?为此将任何非缓存请求转发回另一对 HAProxy 是否有意义?【参考方案2】:

两者各有利弊。 更多在下面的博客文章中,包括 HAProxy 和 Varnish 的配置: http://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/

巴蒂斯特

【讨论】:

如果您可以包含文章中的相关信息,而不仅仅是链接到它,这个答案会更有用。 @Baptiste:博客文章的作者(你?)提出了一个有趣的架构。但我不确定他对“动态内容”的定义。例如,一个用户的主页可能包含 90% 的与其他用户共享的内容(横幅、页脚、广告、今日新闻……),而只有 10% 的真正个性化的内容(其中大部分可能不会每秒都在变化)。因此,最好使用 Varnish 的 ESI 功能来实际缓存用户主页的公共可缓存部分。 Varnish 不能缓存用户的个人但相当静态的数据吗?谢谢你的建议。【参考方案3】:

为什么不使用 2 LB,第一个 LB 可以使用balance uri 选项,第二个 LB 可以使用您选择的策略(工作负载,循环)

          +-- Cache Server #1 --+                +-- App server #1
         /                       \              /
LB #1 --+                         + -- LB #2 --+---- App server #2
         \                       /              \
          +-- Cache Server #2 --+                +-- App server #3

在您需要的地方进行扩展,您需要多少。如果你发现你在 Cache 上没有瓶颈,只需移除 LB#1 并在前面只放置一个 Cache 服务器

【讨论】:

【参考方案4】:

当然是第一个!

为基于 URI 的平衡配置了 HAProxy。 (如果您有与 IP 平衡模式相反的应用程序用户会话,则需要分发您的应用程序用户会话)。

特别是如果您需要 HTTPS 端点,因为 Varnish 不支持 HTTPS。

【讨论】:

以上是关于Haproxy 在清漆前还是相反?的主要内容,如果未能解决你的问题,请参考以下文章

centos 7 之haproxy的配置文件详解及haproxy参数调优

HAProxy实现高级负载均衡实战和ACL控制

centos 7部署Haproxy+Nginx+NFS

HAProxy基本配置调度算法与tcphttpheath模式配置示例

haproxy日志

HAProxy vs Nginx