L4 负载均衡器在将服务器添加到池中时的行为

Behaviour of L4 load balancers on server addition to the pool

据我了解,L4 级负载均衡器,例如Azure 负载均衡器几乎总是无状态的,即它们不会在哪个服务器处理哪个 TCP 连接时保持每个流的状态。

在服务器添加到 DIP 池的情况下,此类负载平衡器的行为是什么?他们是否丢失了一些连接,因为相应的数据包被发送到新服务器?

As I understand L4 level load balancers, e.g. Azure Load Balancer, are almost alway stateless, i.e. they do not keep per-flow state on which server handles which TCP connection.

事实并非如此。

默认情况下,Azure Load Balancer 以 5 元组哈希分配模式(源 IP、源端口、目标 IP、目标端口和协议类型)在多个 VM 实例之间平均分配网络流量。您还可以配置 session affinity。有关详细信息,请参阅 Load Balancer distribution mode。对于会话关联,该模式使用二元组(源 IP 和目标 IP)或三元组(源 IP、目标 IP 和协议类型)哈希将流量映射到可用服务器。 通过使用源 IP 关联,从同一台客户端计算机发起的连接会转到同一 DIP 终结点

What is the behaviour of such load balancers in case of server additions to DIP pool? Do they lose some of the connections since corresponding packets get sent over to the new server?

他们不会失去联系。

负载平衡规则的工作依赖于运行状况探测来检测后端实例上应用程序的故障。参考probe down behavior。如果后端实例的运行状况探测失败,则建立与该后端实例的 TCP 连接 继续。对于新的 TCP 连接,它将连接到剩余的健康实例。负载平衡器 不会终止或发起流 。这是一项 pass-through 服务(不会终止 TCP 连接),并且流量始终在客户端与虚拟机的访客 OS 和应用程序之间进行。

发现 Ananta: Cloud Scale Load Balancing - SIGCOMM 论文实际上说 per-flow 状态存储在一台 MUX 机器(未复制)中,该机器从路由器接收相关流量。因此,只要 MUX 机器保持原样,添加服务器就不会影响现有的 TCP 连接。