セッション維持は、同一のIPからのリクエストが同一のバックエンドサーバーに転送されることを可能にする機能です。デフォルトでは、CLBは各リクエストをそれぞれ異なるバックエンドサーバーインスタンスにルーティングしますが、セッション維持機能を使用することで、特定のユーザーからのリクエストを同一のバックエンドサーバーインスタンス上にルーティングすることが可能になります。こうすることで、セッションを維持する必要があるアプリケーション(ショッピングカートなど)を正しく動作させることができます。
レイヤー4セッション維持
レイヤー4プロトコル(TCP/UDP)はソースIPベースのセッション維持機能をサポートしています。セッション維持時間は30~3600秒の間の任意の整数値を設定でき、この時間閾値を超過すると、セッション中に新しいリクエストがなければセッション維持状態が中断されます。セッション維持とバランシング方式の関連は次のとおりです。
バランシング方式が「重み付けラウンドロビン」の場合は、バックエンドサーバーの重みに応じてリクエストが振り分けられ、ソースIPベースのセッション維持がサポートされます。
バランシング方式が「重み付け最小接続」の場合は、サーバーの負荷と重みに応じて総合的にスケジューリングされ、セッション維持はサポートされません。
レイヤー7セッション維持
レイヤー7プロトコル(HTTP/HTTPS)はCookie挿入ベースのセッション維持機能(ロードバランサがクライアントにCookieを埋め込む)をサポートしています。セッション維持時間は30~3600秒の間で設定できます。セッション維持とバランシング方式の関連は次のとおりです。
バランシング方式が「重み付けラウンドロビン」の場合は、バックエンドサーバーの重みに応じてリクエストが振り分けられ、Cookie挿入ベースのセッション維持がサポートされます。
バランシング方式が「重み付け最小接続」の場合は、サーバーの負荷と重みに応じて総合的にスケジューリングされ、セッション維持はサポートされません。
バランシング方式が「IP Hash」の場合は、ソースIPベースのセッション維持がサポートされ、Cookie挿入ベースのセッション維持はサポートされません。
接続タイムアウト時間
現在、HTTP接続タイムアウト時間(keepalive_timeout)はデフォルトで75秒です。調整をご希望の場合はカスタム設定をアクティブ化してください。この時間閾値を超過すると、セッション中にデータ通信が行われなければ接続が切断されます。
現在、TCP接続のタイムアウト時間は調整できず、デフォルトで900秒となっています。この時間閾値を超過すると、セッション中にデータ通信が行われなければ接続が切断されます。 セッション維持の設定
1. CLBコンソールにログインし、セッション維持の設定を行いたいCLBインスタンスIDをクリックしてCLB詳細ページに進みます。 2. リスナー管理タブを選択します。
3. セッション維持の設定を行いたいCLBリスナーの後方の変更をクリックします。
4. セッション維持機能を有効にするかどうかを選択し、ボタンをクリックして有効化し、維持時間を入力してOKをクリックします。
長時間接続とセッション維持の関係
シナリオ1:HTTPレイヤー7業務
ClientからのアクセスがHTTP/1.1プロトコルであり、ヘッダー情報にConnection:keep-aliveが設定されているとします。CLBを介してさらにバックエンドサーバーにアクセスし、このときセッション維持を有効にしていなかった場合、次のアクセスの際に同一のサーバーにアクセスすることはできますか。
回答:できません。
まず、HTTP keep-aliveとはTCP接続が送信後も有効な状態を維持することで、ブラウザが引き続き同一の接続によってリクエストを送信できることを指します。接続を維持することで、各リクエストが新たに接続を確立するのにかかる時間が節約でき、帯域幅の節約にもなります。CLBクラスターのデフォルトのタイムアウト時間は75秒です(75秒以内に新しいリクエストが更新されなかった場合、デフォルトでTCP接続を切断します)。
HTTP keep-aliveはClient側がCLBとの間で確立するものであり、このときCookieによるセッション維持が有効になっていなければ、次のアクセスの際、CLBはラウンドロビンポリシーに基づいて1台のバックエンドサーバーをランダムに選択し、それまでの長時間接続は無効になります。
このため、セッション維持を有効化しておくことをお勧めします。
Cookieによるセッション維持時間を1000秒に設定した場合、Client側は再度リクエストを送信します。前回のリクエストから75秒以上経過しているため、TCPの接続を再度確立する必要があります。アプリケーション層はCookieを判断し、同一のバックエンドサーバーを見つけるため、Clientがアクセスするサーバーは前回アクセスしたものと同じになります。
シナリオ2:TCPレイヤー4業務
Clientがアクセスを開始し、トランスポート層プロトコルがTCPであり、長時間接続を有効にしているとします。ただし、ソースIPベースのセッション維持は有効にしていません。この場合、次のアクセスの際に、同一のClientが同一のマシンにアクセスすることはできますか。
回答:場合によります。
まず、レイヤー4の実現メカニズムにより、TCPが長時間接続を有効にしている場合、この長時間接続が切断されなければ、連続した2回のアクセスはどちらも同じ接続となり、同一のマシンにアクセスすることができます。2回目のアクセスの際に、最初の接続が他の原因(ネットワークの再起動、接続タイムアウト)によってリリースされた場合、2回目のアクセスは他のバックエンドサーバーにスケジューリングされる可能性があります。また、長時間接続はデフォルトのグローバルタイムアウト時間が900秒であり、新しいリクエストがなければリリースされます。