GlassFishでCluster/Load Balancerの設定

そもそもPALポータルをクラスタのGlassFishで試したいというのが目的なのだけど、その前にそもそも普通にGlassFishでクラスタ設定ができることを確認する。とりあえず、手順は https://glassfish.dev.java.net/javaee5/build/GlassFish_LB_Cluster.html にあるから、そんな感じで設定する。今回は、CentOS5に入れてみた。

Sun Java System Webserver 6.1 をダウンロード

http://www.sun.com/download/products.xml?id=434aec1d

Sun Java System Webserver 6.1 をインストール

(CentOS5 だと compat-libstdc++-296 が必要)

$ mkdir sun-webserver61
$ cd sun-webserver61/
$ tar zxvf /tmp/sun-webserver61-rh72.tar.gz
$ su
# ./setup
# /opt/SUNWwbsvr/https-admserv/start
# exit
$ cd ..

GlassFish をダウンロード

https://glassfish.dev.java.net/downloads/v2ur1-b09d.html

GlassFish をインストール

$ java -Xmx256m -jar /tmp/glassfish-installer-v2ur1-b09d-linux.jar
$ cd glassfish/
$ ant -f setup-cluster.xml

Load Balancer plugin を GlassFish に入れる

http://download.java.net/javaee5/external/Linux/aslb/jars/aslb-9.1-MS4-b1.jar

$ mkdir lib/lbplugin
$ pushd lib/lbplugin
$ jar xvf /tmp/aslb-9.1-MS4-b1.jar
$ unzip SUNWaslb.zip
$ unzip SUNWaspx.zip
$ rm *.zip
$ chmod -R 755 lib
$ popd

GlassFish HTTP load balancing 用 SJSWS 6.1 のインストールと設定

$ vi ./samples/quickstart/clusterjsp/lbplugin.sh
asDir=<GlassFish のディレクトリ(つまり、現在のディレクトリ)>
wsInstanceDir=/opt/SUNWwbsvr/https-<admservではない方>/
os=linux
...
#echo "s/\//\\\\\\\\\//g" > aslb.tmp1.sed
echo "s/\//\\\\\//g" > aslb.tmp1.sed
...
#echo "s/\//\\\\\\\\\//g" > aslb1.tmp1.sed
echo "s/\//\\\\\//g" > aslb1.tmp1.sed
...
$ su
# sh ./samples/quickstart/clusterjsp/lbplugin.sh
# exit

GlassFish V2 domain の起動

$ ./bin/asadmin start-domain

クラスタの作成

$ pushd samples/quickstart/clusterjsp
$ ../../../bin/asant setup-one-machine-cluster

クラスタの起動

$ ../../../bin/asant start_cluster

(エラーが出たけど、再度やったら、警告が出つつ起動した。まぁ、起動しているからとりあえず進む。)

Load Balancer Plugin の設定

$ su
# vi /opt/SUNWwbsvr/https-<admservではない方>/config/loadbalancer.xml
# exit

ブラウザで Sun Java System Webserver 6.1 の Server Manager にアクセスして、Apply ボタンで変更を適用する。そんで、そのサーバーを起動する。

clusterjsp サンプルアプリを配備

$ ../../../bin/asant deploy
$ cd ../../../

clusterjsp サンプルアプリを表示

クッキーを共有していない 2 つのブラウザを使って、http://<サーバー名>/clusterjsp/ にアクセスする。すると、”Served From Server instance”に異なるインスタンス名を見ることができる。Sun Java System Webserver がラウンドロビンで切り替えてる。

In-memory Replication の確認

一応、clusterjsp で適当にセッションも追加しておく。そして、instance-ONE を使っているなら、instance-ONE を止める。

$ ./bin/asadmin stop-instance instance-ONE

止まったら、”RELOAD PAGE”ボタンをクリックする。すると、インスタンスが切り替わり、セッションも維持しているのが確認できる。

っという感じで、スクリプトをいじる必要があったり、クラスタ起動時に警告が出ていたけど、まぁ、一応できた。

GlassFish をクラスタでやったらドメイン上がらない

$ ant -f setup-cluster.xml

でGlassFish をセットアップして、ドメインをあげたら、エラーになった。クラスタじゃないときには普通に上がったと思ったのだけどと思いつつ、server.log みたら、

Caused by: java.lang.NoClassDefFoundError: sun/security/pkcs11/SunPKCS11

って言っている。検索してみたら

http://forums.java.net/jive/message.jspa?messageID=256594

っていうのがあった。こんなバグがあるとは・・・。というわけで、1.5.0_15 にしたら、解決。

Google App Engineを試す

近頃、新しいものから乗り遅れることが多くなっている気がする今日この頃だけど、ちょっとがんばって、Google App Engine を試してみる。入門的な話は http://code.google.com/appengine/docs/gettingstarted/ にあるみたい。まず、SDK を http://code.google.com/appengine/downloads.html から google_appengine.zip をダウンロードする。そんで、下準備する。

$ unzip /tmp/google_appengine.zip
$ cd google_appengine/
$ ls
BUGS  LICENSE  README  VERSION  appcfg.py*  demos/
dev_appserver.py*  google/  lib/  new_project_template/
templates/  tools/

で完了。

早速、お決まりの helloworld を作ってみる。言語は、Python か・・・。数年前にちょろっと使ったきりだよ。なので、大したものは作れんけど、今回はとりあえず、helloworld が見られればいいかね。まずは、helloworld.py を作成する。

$ mkdir marevol
$ vi marevol/helloworld.py
print 'Content-Type: text/plain'
print ''
print 'Hello world from marevol.com!'

動かすには、app.yaml っていう設定ファイルが必要みたい。記述方法は、http://www.yaml.org/ らしい。というわけで、作成する。

$ vi marevol/app.yaml
application: marevol
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
script: helloworld.py

ここまでできたら、SDK を使ってローカルで動作確認する。

$ ./dev_appserver.py marevol/

特にエラーとか出ていないなら、http://localhost:8080/ にアクセスする。すると、「Hello world from marevol.com!」と表示された。なるほど。確認したら、Ctrl-c とかで終了する。

で、次はアップロードだけど、http://code.google.com/appengine/docs/gettingstarted/uploading.html に書いてあるようにサインアップする。スペースないと言われたけど、もちろん通知してくれとしておくと、しばらくしたらメールが来た(数日かかるのかと思ったら、数時間くらいでくれた)。というわけで、ログインして、application-id を取得する。3つまでくれるみたい。

Application Identifier: marevol
Application Title: marevol.com

というような感じで、登録してみた。そんで、さっき作ったアプリケーションをアップロードする(Python は 2.5 以上らしい。でも、無視して進む)。

$ ./appcfg.py update marevol/
Warning: Python 2.4 is not supported; this program may break. Please use version 2.5 or greater.
Email: <アカウントのメールアドレス>
Password for <アカウントのメールアドレス>:
Saving authentication cookies to /home/taro/.appcfg_cookies
Scanning files on local disk.
Initiating update.
Cloning 1 application file.
Uploading 1 files.
Closing update.
Uploading index definitions.

という感じでアップロードできたみたい。ここまでできたら、http://marevol.appspot.com/ にアクセスする。お、無事表示された。

今のところ、使い道は思いつかないけど、何かは作れそう。