WebLogicのクラスタについて理解を深める~2.3.5負荷分散機能との連携~
※ この記事は書籍「OracleWebLogicServer構築運用ガイド11g」の内容を自分なりに解釈して記述したものです。
サーブレットとJSP(Web層のアプリケーション)に対する負荷分散機能
複数のWebLogicServerインスタンスに配置されているWeb層のアプリケーションであるサーブレットとJSPに対し、負荷分散を提供するのは主に以下2つ。
Webサーバープラグイン
負荷分散装置
Webサーバープラグイン
WebサーバープラグインはサードパーティーのWebサーバーであるApatch httpサーバーなどに、WebLogicServerから提供されるモジュールを組み込み、負荷分散を実現する。
また、WebLogicServerには、Oracle HTTP serverというWebサーバープラグインが組み込まれた、Webサーバーが付属されており、それを利用することも可能。
負荷分散で重要になるのは負荷分散方式。
・TCPレベルの負荷分散
レイヤ4の負荷分散機能とも呼ばれる。
一般的にラウンドロビン(順番にサーバーへ振り分ける)が代表的な方式。
・アプリケーションレベルの負荷分散
レイヤ7の負荷分散機能とも呼ばれる。
TCP(トランスポート)レベルの負荷分散、アプリケーションレベルの負荷分散、という2つのポイントがある。
アプリケーションレベルの負荷分散で「HTTPセッションIDによるルーティング」というものが使われる。
これは、クライアントのステート情報をWebLogicServerのウェブコンテナ上のhttpセッションオブジェクトに格納し、同じクライアントからのアクセスは必ずそのクライアントに対応しているhttpセッションオブジェクトがあるWebLogicServerに振り分ける方式のことである。
この時、WebLogicServerに対するルーティングの識別として使用されるのが、WebLogicServerのウェブコンテナによって発行されるhttpセッションID。
なお、負荷分散装置によって行う場合は、必ずしもhttpセッションIDが使用されるわけではない。
HttpセッションIDはhttpセッションオブジェクトがタイムアウト(デフォルトの設定は1時間)するまで、あるいはクライアントに明示的に無効にするまで、WebLogicServer上に保持されている。
HTTPセッションIDの役割
クラスタにおけるHTTPセッションIDの役割は以下の2つ
・アプリケーションレベルの負荷分散のルーティングに用いる識別子
(Webサーバープラグインは必ず識別子として用いるが、負荷分散装置の場合は設定による。)
・Webコンテナの障害時にプライマリサーバーとセカンダリサーバーのペアを決める
負荷分散機能による負荷分散とフェイルオーバーの動作イメージ
動作のポイントは以下2つ
アプリケーションレベルの負荷分散方式
WebLogicServerに障害が発生した際のフェイルオーバー先
HTTPセッションIDには
「プライマリ:管理対象サーバ1、セカンダリ:管理対象サーバー2」
といったような情報を保持している。
これを見て、例えば管理対象サーバ1が障害発生したばあい、セカンダリである管理対象サーバー2へ処理を再振り分け(フェイルオーバー)する。
そして、HTTPセッションオブジェクトのセカンダリがプライマリになり、セカンダリサーバーは「レプリケーショングループ」の設定により選択される。
例えば管理対象サーバー3があれば、管理対象サーバー3上にHTTPセッションオブジェクトのセカンダリが生成され、HTTPセッションIDは
「プライマリ:管理対象サーバ2、セカンダリ:管理対象サーバー3」
というように設定されます。