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

AWS网络负载平衡器粘性会话不工作

商开济
2023-03-14

在我的AWS帐户中,我当前有一个网络负载平衡器(TCP),它指向两个可用性区域(web服务器)上的两个Ec2实例,每个可用性区域都运行一个tomcat,它指向一个Ec2实例,即应用程序服务器/数据库。

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

有人知道为什么AWS网络负载均衡器上的粘性会话不能按预期工作吗?或者我误解了它。

共有2个答案

贺方伟
2023-03-14

只要没有为侦听器设置TLS,NLB的粘性就应该可以工作。

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

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

闻人冷勋
2023-03-14

弹性负载平衡的工作原理:

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

使用流哈希算法从目标组中为默认规则选择目标。该算法基于:

  • 协议

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

我怀疑,当您打开另一个选项卡时,它可能会从不同的端口发送流量,导致粘度失败。坦率地说,我不确定粘度在第4层中会如何工作,因为它不能使用cookie来记住粘度。它当然没有“用户”的概念,因为第4层不能使用cookie,所以没有办法再次识别用户。

 类似资料:
  • 在我创建了traefik守护程序集之后,我在端口80上创建了一个作为负载均衡器的服务,这是Traefik代理端口,节点自动注册到它。如果我点击elb,我得到代理404,这是可以的,因为还没有注册服务 然后,我为web-用户界面创建了一个nodeport服务。pod内的目标端口8080和blosterip上的80。我可以从集群内部卷曲traefik用户界面,它会恢复traefikUI 然后我创建了一

  • 如何将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

  • 我试图为我们的服务器安装负载平衡器。如果使用http,它可以正常工作。但是当我切换到https时 我在浏览器控制台中遇到以下错误: 混合内容:页面位于'https://www.something.com/'通过HTTPS加载,但请求了一个不安全的脚本'…mootools.js'。此请求已被阻止;内容必须通过HTTPS提供 我想我做了一些硬代码,比如“http://www.something.com

  • 问题内容: 我想使用Amazon Elastic Load Balancer将WebSocket连接代理到多个node.js服务器。由于Amazon ELB不提供实际的WebSocket支持,因此我需要使用其原始的TCP消息传递。但是,我试图了解没有某种粘性会话功能的情况如何工作。 我了解WebSocket的工作方式是首先从客户端发送HTTP升级请求,服务器通过发送正确处理密钥身份验证的响应来处理

  • 我希望在现有的服务器设置中集成WAF,因为我有经典的负载平衡器(带有EC2实例),它不支持WAF,我需要迁移到应用程序负载平衡器。 是否可以在不更改DNS(记录)的情况下将现有的经典负载平衡器迁移到应用程序负载平衡器?