【问题标题】:HAProxy - URL Based routing with load balancingHAProxy - 基于 URL 的路由与负载平衡
【发布时间】:2014-01-03 14:03:02
【问题描述】:

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

我有 3 个应用程序。比如app1app2app3

每个应用程序都通过以下网址进行区分:

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

我计划在 2 个不同的地区为每个应用创建 2 个实例:

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

我看到了 2 种配置方法,但我不确定哪种方法是最佳实践:

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

  • 方法 2:拥有一台出色的 HAProxy 服务器,可以按照方法 1 中的说明进行这两种操作。也就是说,具有根据 url 隔离请求的配置,然后将每个请求通过单个过滤器,例如为每个应用设置的负载平衡。

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

【问题讨论】:

    标签: configuration routing haproxy


    【解决方案1】:

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

    【讨论】:

    • 别忘了平衡你的负载均衡器。如果代理失败,您的应用程序将不可用。检查keepalived,可以通过非常简单的配置为您完成这项工作
    • 我有一个典型的情况,很多账户连接到我的负载均衡器。我如何限制从特定帐户发出的每月和每日请求的总数。如果我将 200 作为帐户的每日阈值设置为 ABC 银行,我想放弃超过 200 的所有请求,理想情况下我也应该发送给请求者的“配额超过”消息。我应该在负载均衡器上这样做还是应该在应用程序实例上进行处理?
    • 看起来后端因第一个路径组件而异,在这种情况下path_beg 可能比path_end 更好的测试
    【解决方案2】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多