AWS ELBが前面にある2つのEC2インスタンス(両方のWebアプリが両方のインスタンスで実行されている)で実行されている2つのWebアプリ(App-AとApp-B)があります。セッションスティッキネスは「アプリケーション生成Cookieスティッキネス」を使用して有効にされ、Cookieは「JSESSIONID」として設定されます。
以下はシナリオです。
1)ユーザーは最初にApp-Bにアクセスしようとします。リクエストはノード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にアクセスしようとします。リクエストはノードBに送信され、アプリはパス「/」でJSESSIONIDを作成し、ELBは同じパスのAWSELB Cookieを生成します。
ブラウザに届くSet-cookieヘッダー:
Set-Cookie: JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; Path=/; Secure; HttpOnly
Set-Cookie: AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03;PATH=/;SECURE;HTTPONLY
3)ここで、ユーザーはApp-Bへのアクセスを再試行します。 App-AのCookieは「/」用に作成されているため、ブラウザはJSESSIONIDCookieと2つのAWSELBCookieの両方をブラウザに送信します。私の知る限り、ルートコンテキストのCookieは、同じドメイン内の他のすべてのWebコンテキストに送信する必要があります。
以下は、App-Bに送信されるCookieヘッダーです。
Cookie: JSESSIONID=8629A2C6FA26A99678599B0868511610; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6B3EA2E2C6CEE56E4F76FCE48DFDA95F1F20ED1ADEED570326993D2492C17C070ED41500F3EDC7EB993ED53188BF73D37301213483075952D1ADAD619C3C890672; JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03
このシナリオでは、App-Bに対する連続したブラウザー要求がノードAだけでなく、両方のノードに送信されるというセッションスティッキの問題が発生しています。
このような状況でAWSELBがセッションのスティッキネスをどのように管理するのか興味があります。 2つから1つのAWSELBCookieを選択するものに基づいて? ELBの一部の構成が不足していますか?
前もって感謝します。
これは単純です。ルールと標準的な方法により、1つのアプリケーションにELBを使用する必要があります(ただし、ELBから複数のアプリケーションを使用することを妨げるものは何もありません)。
ソリューション2つの異なるアプリに2つのELBを使用する必要があります
ELBの目的は、負荷をさまざまなノードに分散するだけでなく、可用性とスケーリングを維持することでもあります(使用可能なサーバーが多い場合)。
可用性を実現するには、ノードをマークするヘルスチェック戦略を提供する必要があります利用できない場合はサービス停止。 1つのELBを複数のアプリケーションに使用する場合、どのアプリのヘルスチェックを提供しますか?これは基本的に高可用性の目的を無効にします。
したがって、アプリごとに個別のELBを作成する必要があります。これにより、一般的なAWLELBCookieの問題が解決されます。どちらも異なるELBと通信する異なるAWSELBCookieを持っているためです。
ところで、AWS ELBはこのような複数のことを実行するように最適化されていません。この詳細については https://www.linkedin.com/Pulse/key-benefits-limitation-aws-elb-admin-cloudfoqus をご覧ください。
---トラフィックがシングルIPから生成されると、Amazon ELBはリクエストをスティックします-この点は、AmazonELBを使用している多くのユーザーにとって驚きです。着信トラフィックが単一または特定のIP範囲から発信された場合、Amazon ELBは少し奇妙な動作をします。ラウンドロビンを効率的に完了せず、リクエストを貼り付けます。----