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参数调优