2017-07-19 206 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