discuss_ja@glassfish.java.net

glassfishのクラスタリングについて

From: 小向 政廣 <masahiro.komukai_at_mail.rakuten.co.jp>
Date: Thu, 24 Dec 2009 18:52:53 +0900

始めまして、小向と申します。

GlassFish 2.1 でクラスタリングを行なおうとしていますが、ここ1ヵ月はまってしまっており
困っております。

どなたかお分かりになる方がいらっしゃれば、ご教授をお願い致します。

■構成・確認方法
Linuxサーバ2台で、それぞれapache2.2.13、GlassFish2.1をインストールし、GlassFish側
でクラスタ構成を行い動作確認をしました。

apacheはmod_proxyを使い、apache2台から、GlassFishの2インスタンスにリクエストを割り
振るという構成にしております。

確認したアプリは、GlassFishについているサンプルclusterjspと同じように、画面で登録し
た値をセッションに追加し続けていき、それをそのまま画面に表示するというシンプルなもの
です(ただし、jspではなくサーブレット)。

GlassFishインスタンス1に処理が割り振られたのを確認してから、GlassFishインスタンス1
を落とし、ブラウザの画面をリロード、GlassFishインスタンス2にリクエストが振られ、登録
した内容が保持されたことを確認する、という方法でセッションの引継ぎを確認しました。

■状況
cookieが使えるクライアントからアクセスして動作確認した場合は問題がなかったのですが、
cookieが使えないクライアント(=携帯)からアクセスして、動作確認すると、クラスタ間でセッ
ション情報が引き継がれないという状態になっております。

cookieが使えないクライアント用に、アプリも若干修正、セッション保持のためjsessionidを使
うようにしています。

GlassFish 2.1ではバグがあるらしく、cookieなしの場合は、そのままでは動かなかったので
sun-web.xmlに以下の設定を追加しています。

<session-config>
    <session-properties>
        <property name="enableCookies" value="false" />
    </session-properties>
</session-config>

apacheはmod_proxyを使っており、以下のように設定しました。

ProxyPass /xxx balancer://clusterXxx/xxx stickysession=JSESSIONID
ProxyPreserveHost On
<Proxy balancer://clusterXxx >
BalancerMember http://yyy01:23151loadfactor=1 route=xxx11
BalancerMember http://yyy02:23151loadfactor=1 route=xxx21
</Proxy>

GlassFishのソースはダウンロードしてきて見ているのですが、問題の箇所がどこなのか検討
がつかず・・・

そもそもcookieが使えないとクラスタリングできない、というオチな気もするのですが、きちんと
説明できておらず・・・

どなたかお分かりになる方がいらっしゃいましたら、ご教授よろしくお願い致します。