Google Cloud LoadBalancer无法将客户端与LB之间的tcp连接映射到LB与后端实例之间的tcp连接

在我们的应用程序的性能testing中,我看到一个问题。 问题是LoadBalancer无法映射客户端和LB之间的tcp连接,而LB和后端实例之间的tcp连接。

当一个客户端首次发送一个http请求时,LB会打开一个带有后台实例的新的TCP连接,但是当同一个客户端发送另一个http请求时,LB也会创build一个新的与后端实例的TCP连接。 当我们执行相同的场景直接从客户端发送请求到后端实例,相同的TCP连接被重用。

我们对支持实例的每个进程打开TCP连接有限制,所以我们想知道以下内容。

为什么LB在向后备服务器发送请求时以及在哪里configuration时使用ip范围? LB如何将客户端TCP连接映射到后端TCP连接? 如果没有映射,则由LB施加的开放TCP连接的限制是什么。 如果连接由实例重置,则LB返回的响应代码是什么? 在备份服务器的SYN backlog队列已满的情况下,LB返回的响应代码是什么?

看来这些问题已经在这个讨论中得到了回答。 我在这里重新张贴提供的答案:

“客户端请求由一组负载均衡器处理,这就是为什么当处理来自客户端的请求stream时,您将看到直接连接主机的更改。

来自客户端IP的stream量将由全局负载均衡器池的一个子集处理,但是从您的问题来看,即使这个子集实际上太大,也不会导致高端后端TCP连接重用。 有一些负载均衡器的隐藏参数会影响创build到后端的连接数,以及负载均衡器可以使用现有连接处理新请求的情况。 这些内部参数可能会在将来发生变化,以减less负载均衡器和后端之间所需的TCP连接数量。 在此之前,在后端允许更多的连接,并且在这些连接上更慷慨的超时应该增加后端连接重用。

通过客户端IP或生成的cookie打开会话关联会导致LB在处理来自客户端的stream量时使用特定的后端,但仍会看到来自多个LB IP的stream量。 在不存在会话关联的情况下,实际上在所使用的客户端ips和后端VM之间没有映射。 有关如何启用会话关联的说明,请参阅: https : //cloud.google.com/compute/docs/load-balancing/http/#session_affinity

如果LB无法从后端得到响应,则LB将回复一个502响应代码。负载平衡器会将后端视为不健康,并将stream量引导至其他可用的健康后端。 如果没有健康的后端,负载平衡器将在超时后回复502。