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

roh*_*369 35 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
Run Code Online (Sandbox Code Playgroud)

我打算在2个不同的地区拥有每个应用的2个实例:

Region 1 - app1, app2, app3
Region 2 - app1, app2, app3
Run Code Online (Sandbox Code Playgroud)

我看到2种方法来配置这个,但我不确定这是最好的做法:

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

  • 方法2:有一个很好的HAProxy服务器,它按方法1中的说明执行这两个操作.也就是说,具有根据url隔离请求的配置,然后通过单独的过滤器传递每个请求,就像为每个应用程序设置的内容一样,以实现负载平衡.

我不确定haproxy是否支持方法2.任何想法或建议非常感谢.请稍微说清楚.

Goo*_*ner 55

您可以使用单个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
Run Code Online (Sandbox Code Playgroud)

更多信息可以在主页上找到.

  • 不要忘记平衡负载均衡器.如果代理失败,您的应用将无法使用.检查keepalived,可以通过非常简单的配置为您完成这项工作 (7认同)
  • 看起来后端基于第一个路径组件而不同,在这种情况下,`path_beg`可能是比`path_end`更好的测试 (2认同)