2013-12-16 48 views
29

我是HAProxy的新手,我对HAProxy配置有一个疑问,它可以帮助我在采取正确的方法时作出关键决定。这将大大帮助我决定架构。HAProxy - 基于URL的负载均衡路由

我有3个应用程序。比方说app1,app2,app3

www.example.com/app1/123 -> app1 
www.example.com/app2/123 -> app2 
www.example.com/app3/123 -> app3 

我打算让每个应用程序的两个实例在两个不同的区域:

Region 1 - app1, app2, app3 
Region 2 - app1, app2, app3 

我看到2种方法来配置此

每个应用程序是由网址如下区别但我不确定这里是最佳做法:

  • 方法1:让HAProxy1首先使用url模式区分请求。 来自HAProxy1的请求将被路由到另一个HAProxy服务器,以设置单个应用程序(在这种情况下为3个HAProxy服务器)以实现负载平衡。

  • 方法2:具有确实的既作为在方法1即表示一个大HAProxy的服务器,具有配置偏析根据URL的请求,然后穿过状的东西设置单独的过滤每个请求为每个应用程序进行负载平衡。

我不确定haproxy是否支持方法2。任何想法或建议非常感谢。请放一些灯。

回答

46

您可以使用单个HAProxy服务器根据URL和负载平衡分隔请求。 您的配置将是这样的:

frontend http 
acl app1 path_end -i /app1/123 #matches path ending with "/app/123" 
acl app2 path_end -i /app2/123 
acl app3 path_end -i /app3/123 


use_backend srvs_app1 if app1 
use_backend srvs_app2 if app2 
use_backend srvs_app3 if app3 

backend srvs_app1 #backend that lists your servers. Use a balancing algorithm as per your need. 
    balance roundrobin 
    server host1 REGION1_HOST_FOR_APP1:PORT 
    server host2 REGION2_HOST_FOR_APP1:PORT 

backend srvs_app2 
    balance roundrobin 
    server host1 REGION1_HOST_FOR_APP2:PORT 
    server host2 REGION2_HOST_FOR_APP2:PORT 

backend srvs_app3 
    balance roundrobin 
    server host1 REGION1_HOST_FOR_APP3:PORT 
    server host2 REGION2_HOST_FOR_APP3:PORT 

更多信息可以在homepage找到。

+7

不要忘记平衡你的负载均衡。如果代理失败,您的应用程序将不可用。检查keepalived,可以用很简单的配置为你做这个工作 –

+0

我有一个典型的情况,很多账户连接到我的负载均衡器。我如何限制从一个特定账户登陆的每月和每日请求的总数。如果我设置了200作为ABC账户的每日门槛值,那么我想放弃超过200的所有请求,理想情况下我也应该发送向请求者发送“配额结束”消息。我应该在负载均衡器上执行还是应该在应用程序实例中谨慎处理? –

+1

看起来后端基于第一个路径组件而不同,在这种情况下'path_beg'可能比'path_end'更好的测试 –