AWS Network Load Balancer粘性会话不起作用

时间:2020-07-03 07:03:12

标签: amazon-web-services amazon-ec2 load-balancing amazon-elb aws-elb

在我的AWS账户中,我目前有一个网络负载平衡器(TCP)指向2个可用区(Web服务器)上的两个Ec2实例,每个可用区都运行一个tomcat,这指向一个Ec2实例,即应用服务器/数据库。

在NLB上,启用了粘滞会话,因此当我从Chrome在单个选项卡上访问Web服务器时,一切正常,并且我的所有用户流量都发送到单个Web服务器。当我打开一个新选项卡时,似乎开始了一个新会话,并且我的用户流量可以发送到Web服务器1或Web服务器2。如果发送到另一个Web服务器,则要求我再次登录。目标是使用户的所有流量都通过一个Web服务器进行路由。

有人知道为什么AWS Network Load Balancer上的粘性会话无法按预期工作吗?或者,我误会了。

2 个答案:

答案 0 :(得分:1)

来自How Elastic Load Balancing works

对于网络负载平衡器,接收连接的负载平衡器节点使用以下过程:

使用流哈希算法从目标组中为默认规则选择一个目标。它基于以下算法:

  • 协议
  • 源IP地址和源端口
  • 目标IP地址和目标端口
  • TCP序列号

在连接的整个生命周期内,将每个单独的TCP连接路由到单个目标。 来自客户端的TCP连接具有不同的源端口和序列号,并且可以路由到不同的目标。

怀疑,当您打开另一个选项卡时,它可能正在从其他端口发送流量,从而导致粘性失败。坦白说,我不确定粘性在第4层中如何工作,因为它无法使用Cookie来记住粘性。它肯定没有“用户”的概念,因为第4层无法使用Cookie,因此无法再次识别用户。

答案 1 :(得分:0)

只要您还没有为侦听器设置 TLS,就应该使用 NLB。

https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#sticky-sessions

请注意,负载平衡基于简单的 IP 地址路由工作。因此,如果您的客户端都位于相同的地址块(即 NAT 路由)之后,那么这将导致不平衡。