Configuration 基于HAProxy-URL的负载均衡路由

Configuration 基于HAProxy-URL的负载均衡路由,configuration,routing,haproxy,Configuration,Routing,Haproxy,我是HAProxy的新手,我对HAProxy的配置有一个问题,这有助于我在采取正确方法时做出关键决策。这将极大地帮助我决定架构 我有3个应用程序。比如说app1,app2,app3 每个应用程序通过URL区分,如下所示: www.example.com/app1/123 -> app1 www.example.com/app2/123 -> app2 www.example.com/app3/123 -> app3 我计划在两个不同的地区拥有每个应用程序的两个实例: Regi

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

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

每个应用程序通过URL区分,如下所示:

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
我看到了两种配置方法,但我不确定哪种是最佳做法:

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

  • 方法2:拥有一台出色的HAProxy服务器,可按照方法1中的说明实现这两种功能。也就是说,配置为根据url隔离请求,然后通过为每个应用程序设置的用于负载平衡的单独过滤器传递每个请求


我不确定haproxy是否支持方法2。如有任何意见或建议,我们将不胜感激。请轻一点。

您可以使用单个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

有关详细信息,请访问。

使用HAProxy中的acl为每个应用程序分离路由。您可以使用path_end或path_beg来匹配路径。无论如何,如果要将请求路径更改为后端,请使用“http请求集uri”和reg子模式


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

别忘了平衡你的负载平衡器。如果代理失败,您的应用将不可用。检查KeepAlive,可以用非常简单的配置为您完成此工作我有一个典型的情况,许多帐户连接到我的负载平衡器。我如何限制从特定帐户收到的每月和每日请求的总数。如果我已将200设置为帐户的每日阈值(如ABC银行),我希望删除超过200的所有请求,理想情况下,我还应向请求者发送“配额超过”消息。我应该在负载均衡器上进行测试,还是在应用程序实例上进行测试?看起来后端根据第一个路径组件有所不同,在这种情况下,
path\u beg
可能比
path\u end
更好