Can sticky sessions work in AWS?

I have a web application running on tomcat instances on EC2 and I can’t force sticky sessions to work on a load balancer for life. I followed all the steps in http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html , tried to use both application (using JSESSIONID cookie) and time (using 86400 seconds ), but in any case, this does not work at all. The same user continues to bounce from all the different sites .. every time they click on a new link on a web page, it bounces them back to the main screen to log in again.

I have no idea why it is not working. I also don’t know much about this material (hell, until 2 hours ago I didn’t even know what a “sticky session” means - and no, I can’t just get someone to do this) m not sure where to start with debugging.

EDIT: viewing my cookies .. It seems that the AWSELB cookie continues to be deleted and rewritten every time I load the site, instead of remaining as it should have been.

EDIT 2: XML configuration of my load balancer:

{ "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>" } } ] } 

EDIT 3: Anyone? Please, I desperately need this to work ...

+7
amazon-web-services amazon-elb sticky-session
source share
2 answers

First, how does this sticky material work! ELB just adds an AWSELB cookie (or maybe some other name, you can just search all the cookies and see which one is not yours) for the first time. This cookie also contains information about which server should fulfill this request.

Now all requests coming from one browser will have this cookie, and ELB knows where to forward. Nothing special happens here.

Do the following:

  • Can you send me the website / webapp you are trying? If it is available publicly. Because even I can debug it.

  • Make sure cookies are enabled; although it seems from your question that this is not a problem.

  • What is the expiration date you set for Edit Stickiness! Make sure that when on ELB → click "Edit stickiness" → "Select radio" "Enable load balancing, generated cookie stickiness" and MOST IMPORTANTly, leave the expiration period as empty.

  • Repeat step 3 for HTTPS, also if u uses HTTPS.

Let me know if this works; I am only here for the next hour.

Dont know why ur xml will show SO MUCH LBCookieStickinessPolicies !!

0
source share

You have many different policies created with different configurations, but only one of them is associated with the listener, and one is based on time.

 "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" ] } ], 

The documentation shows how to associate a policy with a listener: http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html#enable-sticky-sessions-duration

Try linking only one of the AppCookieStickinessPolicies that uses the JSESSIONID for the listener

0
source share

All Articles