在我的AWS账户中,我目前有一个网络负载平衡器(TCP)指向2个可用区(Web服务器)上的两个Ec2实例,每个可用区都运行一个tomcat,这指向一个Ec2实例,即应用服务器/数据库。
在NLB上,启用了粘滞会话,因此当我从Chrome在单个选项卡上访问Web服务器时,一切正常,并且我的所有用户流量都发送到单个Web服务器。当我打开一个新选项卡时,似乎开始了一个新会话,并且我的用户流量可以发送到Web服务器1或Web服务器2。如果发送到另一个Web服务器,则要求我再次登录。目标是使用户的所有流量都通过一个Web服务器进行路由。
有人知道为什么AWS Network Load Balancer上的粘性会话无法按预期工作吗?或者,我误会了。
答案 0 :(得分:1)
来自How Elastic Load Balancing works:
对于网络负载平衡器,接收连接的负载平衡器节点使用以下过程:
使用流哈希算法从目标组中为默认规则选择一个目标。它基于以下算法:
- 协议
- 源IP地址和源端口
- 目标IP地址和目标端口
- TCP序列号
在连接的整个生命周期内,将每个单独的TCP连接路由到单个目标。 来自客户端的TCP连接具有不同的源端口和序列号,并且可以路由到不同的目标。
我怀疑,当您打开另一个选项卡时,它可能正在从其他端口发送流量,从而导致粘性失败。坦白说,我不确定粘性在第4层中如何工作,因为它无法使用Cookie来记住粘性。它肯定没有“用户”的概念,因为第4层无法使用Cookie,因此无法再次识别用户。
答案 1 :(得分:0)
只要您还没有为侦听器设置 TLS,就应该使用 NLB。
请注意,负载平衡基于简单的 IP 地址路由工作。因此,如果您的客户端都位于相同的地址块(即 NAT 路由)之后,那么这将导致不平衡。