当前位置: 首页 > 知识库问答 >
问题:

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

白星海
2023-03-14

请原谅我对F5及其实现一无所知。我们有4台web服务器,我们希望使用F5来分配负载。我们正在更换Apache Camel软件负载平衡器。

目前的执行情况:

>

  • 每个客户端在客户发起交互并向SW LB URL发送SOAP请求时创建一个会话ID。超文本传输协议://Server1:7001/WebService

    SW load balancer使用循环算法从以下4个目的地找到合适的服务器,并创建服务器endpoint和会话ID的映射。http://Server1:9080/WebService http://Server2:9080/WebService http://Server3:9080/WebService http://Server4:9080/WebService

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

    可以在Server1上看到,我们有负载均衡器web服务。我们正在解除SW负载均衡器的任务,以便在F5上运行。

    上述方案能否在F5上实施?F5会给我们一个新的URL吗?我们将与客户分享哪些信息以接收请求?比如http://[new_IP_HW_LB]:[new_port]/WebService

    它是否能够从传入的请求中提取会话ID,并维护粘性会话映射?

  • 共有1个答案

    权烨磊
    2023-03-14

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

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

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

    来自DevCentral的Stanislas信用:如何获取响应参数。此i规则将捕获中的参数

    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>"]]
    
    }
    

     类似资料:
    • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

    • 我正在DigitalOcean上使用CoreOs和库伯内特斯构建一个容器集群,我已经看到,为了向世界公开Pod,您必须使用Type: LoadBalancer创建一个服务。我认为这是最佳解决方案,因此您不需要在nginx或haagent等kubernetes之外添加外部负载均衡器。我想知道是否可以使用DO的浮动IP创建它。

    • 目标:将弹性/静态IP分配给负载平衡器(LB),以服务于处理DNS(端口53)、HTTPS(端口443)、HTTP(端口80)的EC2实例。 需要静态IP来正确配置DNS记录(即A记录)。需要在后端/服务器上终止TLS,以提供无限制的 经典的负载平衡器允许自定义安全规则,并允许在EC2实例上终止SSL。问题是静态IP不能分配给经典LB,只能分配给其中的单个实例,这无法平衡负载。 要分配静态IP,我

    • 我是微服务的新手。(学习阶段)。我有一个问题。我们在云中部署微服务。(例如 AWS)。云已经提供了负载平衡和日志。我们还在Spring Boot中实现了负载平衡(功能区)和日志(Rabbit MQ和Zipkin)。这两种实现有什么区别?我们两者都需要吗?有些人可以回答这些问题吗? 提前感谢。

    • 当我将服务与ClusterIP类型和2个POD一起使用时,流量分布在2个POD上。 我找到了另一种服务类型LoadBalancer。这两种服务的区别是什么?LoadBalancer与ClusterIP有何不同? 谢谢

    • 我遵循了GKE教程,使用beta Inrit类型创建HTTP负载均衡器,并且在使用nginx映像时工作正常。我的问题是为什么Inrit是必要的。 我可以创建一个容器引擎集群,然后创建一个使用库伯内特斯创建的实例组作为服务后端的HTTP负载均衡器,并且一切似乎都运行良好。当仅在部分流程中使用库伯内特斯似乎运行良好时,为什么我要经历使用Inete的所有麻烦?