【问题标题】:Idle connection timeout limitation in IBM Cloud LBaaS causes problems in our applicationsIBM Cloud LBaaS 中的空闲连接超时限制会导致我们的应用程序出现问题
【发布时间】:2020-03-13 06:28:18
【问题描述】:

我们是一个 IBM 团队,使用 IBM Cloud LBaaS(负载均衡器服务)来处理我们在 IBM Cloud 基础架构上运行的应用程序。我们收到了一些客户投诉,称无法在我们的产品前端获得预期的响应,这是他们之前在 AWS 上部署我们的产品时从未遇到过的。我们调查了这个问题,发现客户请求的连接被 IBM Cloud 负载均衡器断开,因为这些请求需要超过 50 秒才能从后端获得响应(这些是我们的一些长时间运行任务的用例)。

我们在https://cloud.ibm.com/docs/infrastructure/loadbalancer-service?topic=loadbalancer-service-advanced-traffic-management-with-ibm-cloud-load-balancer#connection-timeouts 找到了连接超时的 50 秒限制。 我们想知道是否可以为我们定制空闲超时来满足我们长期运行的任务?如果目前不支持,是否有计划在未来实施,或者是否有可能将该限制增加到合理的更大值?

FYR,AWS 负载均衡器服务的最大空闲超时时间为 3600 秒https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/

感谢任何有关如何解决/消除此问题的建议。如果您有任何要分享的内容,请随时直接给我发电子邮件 (yang.zhang3@ibm.com)。谢谢!

【问题讨论】:

    标签: ibm-cloud load-balancing


    【解决方案1】:

    如果您指的是空闲连接超时,则在同一文档链接中提到您可以将服务器和客户端超时设置为 7200 秒(2 小时)。

    服务器端和客户端空闲连接超时值现在可以是 使用 API 配置。用户可以配置服务器超时(参数名称: serverTimeout) & 客户端超时(ParameterName: clientTimeout) 值 秒最多 2 小时(范围:1 到 7200 秒),使用 ‘UpdateLoadBalancerProtocols’ 方法 “SoftLayer_Network_LBaaS_Listener”服务。如果用户不提供 服务器或客户端超时值,负载均衡器将使用默认值 相应超时的值(在表中提到)。

    有关如何使用UpdateLoadBalancerProtocols 方法的示例,请查看API reference documentation 中提到的这个softlayer-python 客户端示例

    import SoftLayer
    from pprint import pprint
    
    # Your load balancer UUID
    uuid = 'set me'
    
    # New protocols to add
    protocolConfigurations = [
        {
            "backendPort": 1350,
            "backendProtocol": "TCP",
            "frontendPort": 1450,
            "frontendProtocol": "TCP",
            "loadBalancingMethod": "WEIGHTED_RR",    # ROUNDROBIN, LEASTCONNECTION, WEIGHTED_RR
            "maxConn": 500,
            "sessionType": "SOURCE_IP"
        },
        {
            "backendPort": 1200,
            "backendProtocol": "HTTP",
            "frontendPort": 1150,
            "frontendProtocol": "HTTP",
            "loadBalancingMethod": "ROUNDROBIN",    # ROUNDROBIN, LEASTCONNECTION, WEIGHTED_RR
            "maxConn": 1000,
            "sessionType": "SOURCE_IP",
            "serverTimeout": 70,
            "clientTimeout": 70
        }
    ]
    
    # Create the api client
    client = SoftLayer.Client()
    listener_service = client['Network_LBaaS_Listener']
    
    _mask = "mask[listeners]"
    
    try:
        response = listener_service.updateLoadBalancerProtocols(uuid, protocolConfigurations, mask=mask)
        pprint(response)
    except SoftLayer.SoftLayerAPIError as e:            
        print("Unable to add protocols: %s, %s" % (e.faultCode, e.faultString))
    

    【讨论】:

    • 嗨 Vidyasagar,感谢您的更新!我们很高兴知道它现在是可配置的。我们将通过 API 进行尝试,稍后让您知道结果。
    • 嗨 Vidyasagar,是的,它对我们有用,感谢您的帮助!抱歉,我在答案而不是评论中发布了我的更新,它已被删除(可能是管理员),抱歉我不熟悉 StackOverflow 上的规则。我又贴在这里了:
    • 此帖子已隐藏。它在 2 天前被 Bhargav Rao♦ 删除。我们能够通过 API 配置负载均衡器的超时以更新协议cloud.ibm.com/docs/infrastructure/…。之后我们再也没有看到这个问题。感谢您的帮助!
    • # 你的负载均衡器 UUID uuid = 'set me' # 添加新协议 protocolConfigurations = [ { "listenerUuid": "set me", "serverTimeout": 3600, "clientTimeout": 3600 }, { "listenerUuid": "set me", "serverTimeout": 3600, "clientTimeout": 3600 } ] # 创建 api 客户端 client = SoftLayer.Client() listener_service = client['Network_LBaaS_Listener'] _mask = "mask[listeners] " 尝试:response = listener_service.updateLoadBalancerProtocols(uuid, protocolConfigurations, mask=_mask)
    • 抱歉,我好像无法在 cmets 中粘贴代码 sn-ps。而且我不能将其发布为答案。有效的沟通有点可惜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多