HAProxy - 基于URL的路由与负载平衡

时间:2013-12-16 08:42:35

标签: configuration routing haproxy

我是HAProxy的新手,我对HAProxy配置有疑问,这有助于我采取正确的方法做出关键决定。这将极大地帮助我决定架构。

我有3个应用程序。我们说app1app2app3

每个应用按网址区分如下:

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

我计划在两个不同的地区拥有每个应用的2个实例:

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

我看到有两种配置方法,但我不确定这是最佳做法:

  • 方法1 :让HAProxy1首先使用网址格式区分请求。 来自HAProxy1的请求将被路由到另一个HAProxy服务器,以设置单个应用程序(在本例中为3个HAProxy服务器),以实现负载平衡。

  • 方法2 :有一个很好的HAProxy服务器,它按方法1中的说明执行这两个操作。也就是说,有配置根据url隔离请求,然后通过每个请求通过个别过滤器,就像为每个应用设置的东西一样,用于负载平衡。

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

2 个答案:

答案 0 :(得分:53)

您可以使用单个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上找到更多信息。

答案 1 :(得分:0)

在 HAProxy 中使用 acl 为每个应用程序分离路由。您可以使用 path_end 或 path_beg 来匹配路径。无论如何,如果想将请求路径更改为后端,请使用“http-request set-uri”并使用 reg-sub 模式。


backend be_images
        balance roundrobin  
        http-request set-uri '%[path,regsub(^/images/,/static/images,g)]'
        server srv1 127.0.0.1:8001