当单个请求中存在多个 AWSELB cookie 时,AWS ELB 会话粘性问题

当单个请求中存在多个 AWSELB cookie 时,AWS ELB 会话粘性问题

我有两个 Web 应用程序 - App-A 和 App-B - 在 2 个 EC2 实例中运行(两个 Web 应用程序都在两个实例中运行),前端是 AWS ELB。使用“应用程序生成的 Cookie 粘性”启用会话粘性,并将 Cookie 设置为“JSESSIONID”。

以下是场景:

1) 用户首先尝试访问 App-B。请求转到 Node-A,应用程序创建一个路径为“/appb/”的 JSESSIONID,ELB 为同一路径生成一个 AWSELB cookie。

到达浏览器的 Set-cookie 标头:

Set-Cookie: JSESSIONID=8629A2C6FA26A99678599B0868511610; Path=/appb/; Secure; HttpOnly
Set-Cookie: AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6B3EA2E2C6CEE56E4F76FCE48DFDA95F1F20ED1ADEED570326993D2492C17C070ED41500F3EDC7EB993ED53188BF73D37301213483075952D1ADAD619C3C890672;PATH=/appb/;SECURE;HTTPONLY

2) 然后用户尝试访问 App-A。请求转到 Node-B,应用程序创建一个带有路径“/”的 JSESSIONID,ELB 为同一路径生成一个 AWSELB cookie。

到达浏览器的 Set-cookie 标头:

Set-Cookie: JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; Path=/; Secure; HttpOnly
Set-Cookie: AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03;PATH=/;SECURE;HTTPONLY

3) 现在用户再次尝试访问 App-B。浏览器将 JSESSIONID cookie 和 2 个 AWSELB cookie 都发送给它,因为 App-A 的 cookie 是为“/”创建的。据我所知,应该将根上下文的 cookie 发送给同一域中的所有其他 Web 上下文。

以下是发往 App-B 的 cookie 标头:

Cookie: JSESSIONID=8629A2C6FA26A99678599B0868511610; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6B3EA2E2C6CEE56E4F76FCE48DFDA95F1F20ED1ADEED570326993D2492C17C070ED41500F3EDC7EB993ED53188BF73D37301213483075952D1ADAD619C3C890672; JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03

在这种情况下,我遇到了会话粘性问题,其中对 App-B 的连续浏览器请求发送到两个节点,而不仅仅是节点 A。

我很好奇 AWS ELB 在这种情况下如何管理会话粘性。它根据什么从 2 个 AWSELB cookie 中选择 1 个?我是否缺少 ELB 中的某些配置?

提前致谢。

答案1

这很简单,按照规则和标准做法,您需要为一个应用程序使用一个 ELB(但没有什么可以阻止您从 ELB 使用多个应用程序)。

解决方案您需要为两个不同的应用程序使用 2 个 ELB

  • 解释:

ELB 的目的不仅是将负载分配到不同的节点,而且还要保持可用性和扩展性(使用高可用性服务器)。

为了实现可用性,你需要提供一个健康检查策略,该策略将标记节点中止服务如果不可用。如果您要将一个 ELB 用于多个应用程序,您将提供哪个应用程序的健康检查?这基本上违背了高可用性的目的。

因此,您最终需要为每个应用程序创建单独的 ELB。这将解决您的常见 AWLELB cookie 问题。因为两者都将具有与不同 ELB 通信的不同 AWSELB cookie。

顺便说一句,AWS ELB 并未针对此类多任务进行优化。有关详细信息,请参阅 https://www.linkedin.com/pulse/key-benefits-limitation-aws-elb-admin-cloudfoqus

---当流量来自单个 IP 时,Amazon ELB 会保留请求 - 这一点让许多使用 Amazon ELB 的用户感到惊讶。当传入流量来自单个或特定 IP 范围时,Amazon ELB 的行为有点奇怪,它无法有效地完成循环并保留请求。----

相关内容