PR

図3 B社はURLにサーバー判別用の文字列を書き込んでセッションを維持
負荷分散装置は,Webアプリケーション・サーバーがリンク情報に書き込んだ文字列でサーバーを特定する。あらかじめ優先度を付けた複数のサーバーを負荷分散装置に登録し,バックアップできるようにした。

リンク情報に入れた文字列で判別

 B社が導入した負荷分散装置には,セッションをクッキーと送信元IPアドレスで判断する機能がある。だが,iモード端末はクッキーが使えないし,IPアドレスも変わってしまう。この機能は使えない。

 ただし,この負荷分散装置はパケットの内容を細かく分析し,URIを識別するスクリプトを搭載できる製品だった。このスクリプトでURIの任意の文字列を識別させ,セッションを判断する。

 B社のシステムでは,ユーザーがあらかじめ設定したURLにアクセスすると,Webアプリケーションが必要なメニューや処理をリンク形式でページ上に表示する。そこでこの仕組みを活用し,負荷分散装置のスクリプトと連携させるようにした。

 まず,Webアプリケーションに工夫を施した。クライアントに送信するWebページのURIに“&Server=WWW1”という形で,処理を担当しているサーバーのホスト名を書き込むのである(図3[拡大表示])。この情報はユーザーには見えない。

 ユーザーがリンクをクリックすると,負荷分散装置にリンク情報を送信する。負荷分散装置内に設定したスクリプトがURI内のサーバーを表す文字列を判別。そのWebサーバーに処理を割り当てて,セッションを維持する。

サーバーに優先度付けて冗長化

 ただしこの方法ではWWW1が故障した場合に,WWW2は稼働中でもWWW2に割り当てられない。そこで,負荷分散装置の設定を変えて,1台のサーバーが故障しても,セッションを再起動さえすれば別のサーバーが使えるように冗長化対策を施した。

 具体的には,URIで記述したサーバー名以外のWebサーバーにもアクセスできるようにしておく。負荷分散装置には,文字列で記述したサーバーごとにグループを定義。例えば「WWW1」グループでは,WWW1サーバーの優先度を高く設定し,WWW2サーバーとWWW3サーバーの優先度は低く設定する。

 WWW1という文字列を含むリクエストはWWW1グループに割り当てられ,最も優先度が高いWWW1サーバーにアクセスする。ただし,WWW1が止まっていれば,優先度が低いWWW2かWWW3に割り当てる。

 サーバーのアプリケーションは,受け取ったURIに他のサーバー名が記述してあると,他のサーバーに障害が発生していると判断。セッションを再起動する。こうしてB社は,設備投資を抑えながら,セッション維持と障害対策を実現できた。