在清漆或其他方式之前的Haproxy?
我可以想象两个设置:
负载平衡然后caching
+-- Cache server #1 (varnish) -- App server #1 / Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2 \ +-- Cache server #3 (varnish) -- App server #3
caching然后负载平衡
+-- App server #1 / Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2 \ +-- App server #3
第一个设置的问题是有多个caching,浪费了大量的内存,使得caching失效更为复杂。
第二个设置的问题是,可能会有一个性能问题和两个单点故障(varnish和haproxy)而不是一个(haproxy)?
我很想去第二次设置,因为haproxy和varnish都应该是快速和稳定的:你的意见是什么?
几年前,我为一个繁忙的Web应用程序构build了一个类似的设置(只有我使用Squid而不是Varnish),并且运行良好。
我会推荐使用你的第一个设置(HAProxy – > Varnish)进行两个修改:
- 使用
keepalived
和共享虚拟IP添加辅助HAProxy服务器 - 使用
balance uri
负载均衡algorithm来优化caching命中
优点:
- 用HAProxy(x2)和Varnish(x3)冗余来安心
- 使用HAProxy URI负载均衡选项,可以更好地提高Varnish的效率
- 从caching服务器获得更好的性能,因为它们不需要保留在内存中
- caching失效更容易,因为每次同一个URI都会到同一个服务器
缺点:
- URI平衡工作得很好,但是如果caching服务器closures,后端服务器将会受到影响,因为从更新后的URI平衡哈希中拾取冗余的其他caching服务器将需要重新检索caching的数据。 也许不是一个大骗局,但我必须记住我的系统。
两者都有优点和缺点。 更多的在下面的博客文章,包括HAProxy和Varnish的configuration: http : //blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/
巴蒂斯特
当然是第一个!
HAProxyconfiguration为基于URI的平衡。 (如果您的应用程序用户会话与IP平衡模式相反,则需要分发您的应用程序用户会话)。
特别是如果你需要HTTPS端点,因为Varnish不会说HTTPS。
为什么不使用2 LB,第一个LB可以使用balance uri
选项,第二个LB可以使用您select的策略(工作负载,循环)
+-- Cache Server #1 --+ +-- App server #1 / \ / LB #1 --+ + -- LB #2 --+---- App server #2 \ / \ +-- Cache Server #2 --+ +-- App server #3
在需要的地方进行缩放,只需要多less。 如果您发现自己不是caching瓶颈,只需删除LB#1,然后只放置一个Cache服务器