2017-07-19 205 views
7

我有一个在EC2的tomcat实例中运行的web应用程序,我不能在我的生活中使用粘性会话在负载平衡器上工作。我已经遵循了http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html中的所有步骤,尝试使用基于应用程序(使用JSESSIONID cookie)和基于时间(使用86400秒)的方法,但是无论如何,它根本不起作用。同一个用户不断在所有不同的节点上弹跳。每当他们点击网页上的新链接时,它都会将其弹回到主屏幕以再次登录。无法在AWS中使用粘性会话?

我不知道为什么它不起作用。我也不太了解这个东西(嘿,直到2个小时前,我甚至不知道'粘滞会话'是什么意思 - 不,我不能让别人去做),所以我'我不确定从哪里开始调试它。

编辑:看着我的cookies ..看来,AWSELB cookie不断被删除和重写每次我加载网站,而不是像它应该坚持。

编辑2:我的负载均衡器的XML配置:

{ 
    "LoadBalancerDescriptions": [ 
     { 
      "Subnets": [ 
       "subnet-5c83aa39", 
       "subnet-6a778830", 
       "subnet-c41cdde8" 
      ], 
      "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K", 
      "CanonicalHostedZoneName": "<ELB_NAME>-<redacted>.us-east-1.elb.amazonaws.com", 
      "ListenerDescriptions": [ 
       { 
        "Listener": { 
         "InstancePort": 5432, 
         "LoadBalancerPort": 5432, 
         "Protocol": "TCP", 
         "InstanceProtocol": "TCP" 
        }, 
        "PolicyNames": [] 
       }, 
       { 
        "Listener": { 
         "InstancePort": 8888, 
         "LoadBalancerPort": 8888, 
         "Protocol": "HTTP", 
         "InstanceProtocol": "HTTP" 
        }, 
        "PolicyNames": [ 
         "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500995555135" 
        ] 
       } 
      ], 
      "HealthCheck": { 
       "HealthyThreshold": 2, 
       "Interval": 10, 
       "Target": "HTTP:44554/", 
       "Timeout": 8, 
       "UnhealthyThreshold": 4 
      }, 
      "VPCId": "vpc-721bec0b", 
      "BackendServerDescriptions": [], 
      "Instances": [ 
       { 
        "InstanceId": "i-0ca9c244ed930d58f" 
       }, 
       { 
        "InstanceId": "i-0cf47dc916f3f3443" 
       }, 
       { 
        "InstanceId": "i-09ce2f24abc50259f" 
       } 
      ], 
      "DNSName": "<ELB_NAME>-<redacted>.us-east-1.elb.amazonaws.com", 
      "SecurityGroups": [ 
       "sg-f5ff638b" 
      ], 
      "Policies": { 
       "LBCookieStickinessPolicies": [ 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500564994754", 
         "CookieExpirationPeriod": 86400 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500565103581", 
         "CookieExpirationPeriod": 0 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500566463445", 
         "CookieExpirationPeriod": 28800 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500566440580", 
         "CookieExpirationPeriod": 0 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500476922828", 
         "CookieExpirationPeriod": 86400 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500481383343", 
         "CookieExpirationPeriod": 86400 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500479370743", 
         "CookieExpirationPeriod": 86400 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500475843862", 
         "CookieExpirationPeriod": 86400 
        }, 
        { 
         "PolicyName": "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500995555135", 
         "CookieExpirationPeriod": 86400 
        } 
       ], 
       "AppCookieStickinessPolicies": [ 
        { 
         "PolicyName": "AWSConsole-AppCookieStickinessPolicy-<ELB_NAME>-1500477157435", 
         "CookieName": "JSESSIONID" 
        }, 
        { 
         "PolicyName": "AWSConsole-AppCookieStickinessPolicy-<ELB_NAME>-1500472642494", 
         "CookieName": "JSESSIONID" 
        }, 
        { 
         "PolicyName": "AWSConsole-AppCookieStickinessPolicy-<ELB_NAME>-1500473344752", 
         "CookieName": "JSESSIONID" 
        }, 
        { 
         "PolicyName": "AWSConsole-AppCookieStickinessPolicy-<ELB_NAME>-1500473227851", 
         "CookieName": "JSESSIONID" 
        } 
       ], 
       "OtherPolicies": [] 
      }, 
      "LoadBalancerName": "<ELB_NAME>", 
      "CreatedTime": "2017-07-18T15:32:33.890Z", 
      "AvailabilityZones": [ 
       "us-east-1a", 
       "us-east-1b", 
       "us-east-1c" 
      ], 
      "Scheme": "internet-facing", 
      "SourceSecurityGroup": { 
       "OwnerAlias": "558554867759", 
       "GroupName": "<redacted>" 
      } 
     } 
    ] 
} 

编辑3:有人吗?请我越来越绝望我需要这个工作...

+0

请捕捉一些请求和响应头以说明AppCookieStickinessPolicies之一你的cookie“被删除”。 –

+0

@ Michael-sqlbot不知道如何做到这一点(再次,我真的是在网络上的新东西)..我只是在铬浏览cookie列表,并注意到AWSELB cookie不断变化... – user1072692

+0

你能使用AWS CLI发送负载均衡器配置的XML描述:'aws elb describe-load-balancers --load-balancer-name my-loadbalancer' –

回答

0

首先这个粘性的东西是如何工作的! ELB只是第一次添加了一个cookie AWSELB(或者可能是其他的名字,你可以只查找所有的cookies,看看哪一个不是你的)。这个cookie也有服务器这个请求应该去的信息。

现在,来自同一浏览器的所有请求都将具有该cookie,ELB知道该转发的位置。这里没有什么是不行的。

让我们做以下:

  1. 你能送我的网站/ web应用程序你想?如果它是公开的。因为即使我可以调试它。

  2. 确保cookies是允许的;尽管看起来像你的问题,这不是一个问题。

  3. 您在Edit Stickiness上设置的到期期限是多少?确保在ELB上点击 - >点击编辑粘滞度 - >选择单选按钮“启用负载平衡器生成的cookie粘性”,最重要的是保留过期期限为空白。

  4. 如果您使用的是HTTPS,请重复第3步以获取HTTPS。

让我知道它是否有效;我只在这里等待下一个小时。

不知道为什么你的XML显示很多LBCookieStickinessPolicies!

+0

网站不向公众开放。 Cookies是允许的。有效期为空白。 HTTPS未被使用。 – user1072692

+0

正在考虑它;只有可能的原因,我能想到的是,你的服务器将无法从ELB服务..你可以去ELB - >监测 - >健康的主机 - >并查看是否有任何实例间歇性地不健康。我想让你尝试的另一件事是另一个浏览器。 – Deepak

+0

服务器已连续4周保持健康状态。一直试着用Chrome,Edge和Firefox – user1072692

0

你有很多不同的策略创建不同的配置,但只有一个与侦听器相关联,而且一个是基于时间的。

"LoadBalancerDescriptions": [ 
    { 
     "Subnets": [ 
      "subnet-5c83aa39", 
      "subnet-6a778830", 
      "subnet-c41cdde8" 
     ], 
     "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K", 
     "CanonicalHostedZoneName": "<ELB_NAME>-<redacted>.us-east-1.elb.amazonaws.com", 
     "ListenerDescriptions": [ 
      { 
       "Listener": { 
        "InstancePort": 5432, 
        "LoadBalancerPort": 5432, 
        "Protocol": "TCP", 
        "InstanceProtocol": "TCP" 
       }, 
       "PolicyNames": [] 
      }, 
      { 
       "Listener": { 
        "InstancePort": 8888, 
        "LoadBalancerPort": 8888, 
        "Protocol": "HTTP", 
        "InstanceProtocol": "HTTP" 
       }, 
       "PolicyNames": [ 
here ---->   "AWSConsole-LBCookieStickinessPolicy-<ELB_NAME>-1500995555135" 
       ] 
      } 
     ], 

文档点,你怎么一个政策与听众相关联:http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html#enable-sticky-sessions-duration

尝试仅仅关联使用JSESSIONID到监听

+0

试过了。还是行不通。 – user1072692