Glassfish 3.1の自己増殖クラスタを試す
先日のオープンラボ備後で、Oracleの寺田さんにご紹介いただいたGlassfish。クラスタ環境が面白そうだったので、自分でも試してみました。
前準備
今回も例によってUbuntu環境。Ubuntu 10.04をインストールしたマシンを2台用意します。自分は仮想マシンで用意しました。
また、お互いホスト名で名前解決できるように/etc/hosts辺りを設定しておきます。
合わせてJavaも両マシンにインストール。デフォルトではsshdが入ってないようなのでこれもapt-get*1して導入しておきます。
自分は以下のような構成で実験しました。
DAS(Domain Administration Server)サーバはクラスタ全体をコントロールする管理サーバ。これにsister1というNodeを作成してクラスタ環境を構築していきます。
DASサーバのインストール
DASサーバといっても普通にGlassfishをインストールするのと、差はありません。Glassfishのバイナリをとってきてunzipするだけ。
この辺りからダウンロードできます。ここで注意ですが、Glassfish 3.1には2つのプロファイルがあります。
- Full Platform - 全ての機能を網羅した完全版
- Web profile - Web開発に特化したバージョン
通常はWeb Profileで十分なので、今回はこれを使用します。
cd /usr/local/src wget http://download.java.net/glassfish/3.1/release/glassfish-3.1-web-ml.zip unzip glassfish-3.1-web-ml.zip mv glassfish3 /usr/local
インストール自体はこれで終了。あとは
cd /usr/local/glassfish3/glassfish/bin ./asadmin start-domain
とするだけでGlassfishが起動します。超簡単。試しに管理画面を見てみましょう。ブラウザから
- http://[misakaサーバのIP]:4848
にアクセスします。start-domain実行時のログにも出ていますが、通常は管理用Web画面にアクセスする場合のポートは4848番です。以下のように管理ツールが起動しているのが確認できます。
SSH接続の設定
次にmisakaサーバからsister1サーバへパスワードなしでSSH接続できるように設定をおこないます。
echo "AS_ADMIN_SSHPASSWORD=hogehoge" > /tmp/password
上記のhogehogeの部分はsister1サーバのrootのパスワードに置き換えてください。
その後、以下のコマンドを発行。
./asadmin --passwordfile=/tmp/password --interactive=false setup-ssh --sshuser root --generatekey=true sister1
これでパスなしでsister1にSSH接続できるようになっているはずなので、以下のような感じで接続できるか、試してみます。
ssh sister1 java -version
パスワードを聞かれることなくsister1でjava -versionを実行した場合と同じ内容が返ってくれば、問題ありません。また、/tmp/passowrdは念のため消しておきます。
ここでハマったこと。
自分の場合(openssh-server)は、SSHで接続した場合ユーザの環境変数を適用できていないらしく、javaへのPATHが通っていないという現象に陥りました。
その場合は、sister1のサーバに以下の設定を行います。
- sshd_configの修正
sister1サーバ上の/etc/ssh/sshd_configを修正します。以下の記述を追加。
PermitUserEnvironment yes
本来はこの設定のみで、ユーザの環境変数を使用できるはずなんですが、自分が使用したopenssh-serverでは動かず、さらに以下の設定を行いました。
- environmentの作成
sister1サーバ上で/root/.ssh/environmentを作成します。javaコマンドにPATHが通るように
echo "PATH=$PATH:/usr/local/java/bin" > ~/.ssh/environment
等とかでjavaへのPATHを通します。
上記2点の設定を行い、sshdを再起動*3します。再度、misakaサーバから
ssh sister1 java -version
とやって結果を確認します。
sister1サーバへGlassfishのインストール
sister1にGlassfishをインストールします。Glassfishには自分自身をZIPにまとめて、SSH経由で他のサーバにこれを展開し、自動でインストールする機能があります。だから自己増殖です。*4
misakaサーバ上で以下のコマンドを実行します。
./asadmin install-node --installdir /usr/local/glassfish3 --sshuser root --sshkeyfile ~/.ssh/id_rsa sister1
実行すると、こんな感じで出力されます。
Created installation zip /usr/local/glassfish3/glassfish/bin/glassfish2277027524628389477.zip Successfully connected to root@sister1 using keyfile /root/.ssh/id_rsa Copying /usr/local/glassfish3/glassfish/bin/glassfish2277027524628389477.zip (58978127 bytes) to sister1:/usr/local/glassfish3 Installing glassfish2277027524628389477.zip into sister1:/usr/local/glassfish3 Removing sister1:/usr/local/glassfish3/glassfish2277027524628389477.zip Fixing file permissions of all files under sister1:/usr/local/glassfish3/bin
misakaサーバでGlassfish自身のZIPを作成し、これをsister1に送って展開している様子がよくわかります。
ノードとインスタンスの作成
次にsister1サーバをDASサーバの管理下に置けるようにノードとして登録します。misakaサーバで以下を実行。
./asadmin create-node-ssh --nodehost sister1 --sshuser root --sshkeyfile ~/.ssh/id_rsa --installdir /usr/local/glassfish3 sister1
管理用Web画面のノードに、sister1が追加されていることがわかります。
次にここで追加したsister1ノードをcluster1がインスタンスとして使用できるようにします。misakaサーバで以下を実行。
./asadmin create-instance --node sister1 --cluster cluster1 instance1
管理用Web画面のクラスタからに、cluster1にinstance1が追加されていることがわかります。
クラスタを起動してみる
早速、ここまで構成したクラスタを起動してみましょう。misakaサーバで以下を実行します。
./asadmin start-cluster cluster1
するとcluster1に配備されている全てのノードのインスタンスが一度に起動し、クラスタ環境が実行されます。
管理用Web画面からwarファイルをデプロイするなどして、クラスタ環境を実際に試してみてください。
さらにNodeを増やすには
今回は1台のみの構成でしたが、クラスタ環境なので、当然これを増やしていくこともできます。手順としては
- ssh-setupで、対象マシンにDASサーバからパスワードなしでSSH接続できるよう設定する
- install-nodeで対象マシンにGlassfishのバイナリをコピーする
- create-node-sshでDASサーバの管理下に置く
- create-instanceでクラスタにインスタンスを追加する
といった手順です。
このように、作業をクラスタ上の各マシンでおこなうことなく、DASサーバだけでほとんどの管理ができるのは、Glassfish 3.1の大きな特徴かと思います。