用F5替换Apache Camel以平衡4个Web服务器上的负载

时间:2016-06-02 15:32:41

标签: web-services load-balancing f5

请原谅我对F5及其实施的零知识。我们有4个Web服务器,我们希望使用F5来分配负载。我们正在取代Apache Camel软件负载均衡器。

当前实施:

  1. 当客户启动交互并将SOAP请求发送到SW LB URL时,每个客户端都会创建一个会话ID。 http://Server1:7001/WebService

  2. SW负载均衡器使用循环算法从以下4个目的地中查找合适的服务器,并创建服务器端点和会话ID的映射。 http://Server1:9080/WebService http://Server2:9080/WebService http://Server3:9080/WebService http://Server4:9080/WebService

  3. SW LB维持此会话10分钟。在此时间内,如果请求再次出现相同的会话ID,则使用相同的目标服务器来处理请求。因此,通过这种方式,如果用户与Server2进行会话 - 此服务器将继续为他提供服务,直到用户结束会话(或会话超时)。

  4. 在Server1上可以看到我们有负载均衡器+ Web服务。我们正在降低SW负载均衡器以便在F5上进行微分。

    以上方案可以在F5上实施吗? F5会给我们一个新的URL吗?我们将与客户分享以接收请求?像http://[new_IP_HW_LB]:[new_port]/WebService

    一样

    是否能够从传入请求中提取会话ID并且可以维护粘性会话映射?

1 个答案:

答案 0 :(得分:2)

是的,您可以用F5替换Apache Camel,您的设置非常标准。创建4个节点,一个包含4个成员的池和虚拟服务器。

除非Server1放弃地址,否则F5将需要一个新的IP地址[URL]。您还可以使用标准端口(HTTP为80,HTTPS为443)。

最难的部分是会话ID持久性。您需要创建具有600秒超时的通用持久性配置文件(本地流量»配置文件»持久性)并创建iRule以基于XML格式创建记录。 iRules可能很棘手,但DevCentral社区已经有了一个可以适应的解决方案。

来自StanislasDevCentral: how get response parameters。此iRule将捕获<uid> XML标记内的参数。

when HTTP_RESPONSE {
  # Trigger collection for up to 1MB of data
  if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576}{
    set content_length [HTTP::header "Content-Length"]
  } else {
      set content_length 1048576
  }
  # Check if $content_length is not set to 0
  if { ([HTTP::status] == 200) && ($content_length > 0)} {
    HTTP::collect $content_length
  }
}

when HTTP_RESPONSE_DATA {
    # do stuff with the payload
    #find the application unique identifier between <uid> and </uid> (5 is the length of <uid> string)
    persist add uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]
}

when HTTP_REQUEST {
    persist uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]

}