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

网络负载平衡器导致长请求在120秒后返回,但响应为空

艾修然
2023-03-14

我有一个有2个节点的GKE集群,服务类型为LoadBalancer。当我在内部调用服务时,长请求不会在120秒后超时。但是,如果我调用转发到内部服务的网络负载均衡器的外部IP,我会收到“来自服务器的空回复”响应。

外部调用示例:

curl -v "http://<public-ip>/longResponse"
*   Trying <public-ip>...
* TCP_NODELAY set
* Connected to <public-ip> (<public-ip>) port 80 (#0)
> GET /longResponse HTTP/1.1
> Host: <public-ip>
> User-Agent: curl/7.54.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host <public-ip> left intact
curl: (52) Empty reply from server

内部调用示例:

/ # wget -O - -S <service-name>/longResponse
Connecting to location-service (10.3.255.181:80)
  HTTP/1.1 200 OK
  Access-Control-Allow-Origin: *
  Content-Type: application/json
  Content-Length: 15
  Date: Thu, 28 Feb 2019 10:31:14 GMT
  Connection: close

-                    100% |*********************************************************************************************************************************************************************************************************************|    15  0:00:00 ETA
/ # 

我试图在负载均衡器级别找到请求或套接字超时的留档,但没有遇到任何问题。有什么想法吗?

谢谢

共有2个答案

仲法
2023-03-14

使用以下内容获取负载平衡器的后端名称:

gcloud compute backend-services list

然后呢

BACKEND=name-of-your-backend
gcloud compute backend-services update $BACKEND --timeout=600s

否则,在控制台中:<代码>网络服务⇒ 负载平衡⇒ 后端然后可以单击HTTP后端并编辑设置,包括超时。

从更广泛的角度来看,这可能是服务器和客户端之间的服务跳之一,每个跳都可能超时。您最好接受超时(并在超时之前完成长轮询),或者将数据滴入线中......例如,您可以将空格准备到json,因此例如,每30秒发送一个space字符,直到您有一个合适的响应体。这将防止负载平衡超时。

周培
2023-03-14

您确定这不是客户端超时吗?网络LB除了路由数据包外,不会处理其他数据包,因此它永远不会发送任何响应。

是否尝试使用-m标记卷曲?

还可以在客户端捕获一个tcpdump,以便查看网络的实际运行情况。

 类似资料:
  • 如何将aws应用型负载均衡器和网络负载均衡器直接与自动缩放组(ASG)连接?在AWS控制台中,只有经典负载均衡器可用。我想要的是,每当在自动缩放组中启动实例时,它将开始直接向应用程序/网络负载均衡器报告,而不是手动输入目标组中的每个实例。

  • 最近,我在一台机器上使用HAProxy配置了两个Tomcat(A和B)的集群(一切正常)。我已经在两个网络服务器上解除了Geonetwork WAR。我启动Tomcat A没有问题,但是当启动Tomcat B时,当它的“geonetwork.war”试图访问Lucen索引时出错,这是由于Tomcat A启动时write.lock生成的锁(我假设)。 错误如下: 2016-11-22 20:47:5

  • 我正在尝试对远程服务器进行api调用,最初,我遇到以下错误:

  • AWS推出了应用程序负载平衡器,可以进行基于路径的路由。是否可以将经典负载平衡器放在应用程序负载平衡器之后。 示例:假设我们有两个经典的负载平衡器。应用程序负载平衡器将流量路由到所有url(如应用程序负载平衡器/前端)的第一个经典负载平衡器,并将流量路由到所有url(如应用程序负载平衡器/后端)的第二个经典负载平衡器* 目前,似乎我们只能将主机置于应用程序负载平衡器之后。是否可以将负载平衡器置于应

  • 当我将google云平衡器与CDN一起使用时,我遇到了一个错误502,问题是,我很确定我在设置负载平衡器时一定做错了什么,因为当我删除负载平衡器时,我的网站运行得很好。 这就是我在这里配置负载平衡器的方式 我应该使用HTTP或HTTPS healthcheck吗?因为当我设置HTTPS healthcheck时,我的网站先运行了一段时间,然后又关闭了 我已经检查了这个链接,他们似乎有同样的问题,但

  • 在我的AWS帐户中,我当前有一个网络负载平衡器(TCP),它指向两个可用性区域(web服务器)上的两个Ec2实例,每个可用性区域都运行一个tomcat,它指向一个Ec2实例,即应用程序服务器/数据库。 在NLB上,粘性会话是启用的,因此当我在单个选项卡上从Chrome访问网络服务器时,一切正常,我的所有用户流量都发送到单个网络服务器。当我打开一个新选项卡时,似乎启动了一个新会话,我的用户流量可以发