2011年11月22日火曜日

RPM 版 Tomcat のマルチインスタンス化

初めての投稿になります。サイオスの鎌田です。

RHEL6 からは、提供される Tomcat のバージョンが 6.x 系となり、OpenJDK との組み合わせで今後利用が増えてくるのではないでしょうか。社内向けのツールなど、簡単な Web アプリケーションであれば RHEL6 上で動作させ、運用していくことも十分に考えられるかと思います。

しかし、RPM 版 Tomcat を用いる上で、こういった問題を抱えてはいないでしょうか。Web アプリケーション同士の相性により、1つの Tomcat インスタンス上で同時に動作させると問題が生じるため、仕方なくコミュニティ版の Tomcat で環境を構築するといった問題です。代表的な例として、Atlassian 社製のエンタープライズ Wiki アプリケーションである Confluence と、同社の ITS である JIRA は、それぞれを 1つの Tomcat インスタンス上で動作させることはサポート対象外としています。

実は、RPM 版 Tomcat でマルチインスタンス化させることは可能なのです。元々の Tomcat の機能を使うだけなのですが、RPM 版 Tomcat では init スクリプトでマルチインスタンスを管理できるように考慮されて作られています。以下、その手順を述べます。

まず、新しくインスタンスを作るための準備を行います。適当なディレクトリを決め、その下に Tomcat のディレクトリ構造を作るのです。ここでは、CATALINA_BASE と呼びますが、例として /usr/share/sample といったディレクトリを作成することを想定します。

# mkdir -m 775 /usr/share/sample \
    /usr/share/sample/bin \
    /usr/share/sample/conf \
    /usr/share/sample/temp \
    /usr/share/sample/webapps \
    /usr/share/sample/work \
    /var/log/sample

次に、作成したディレクトリの所有者と所有グループを適切に変更します。

# chown root:tomcat /usr/share/sample/bin \
    /usr/share/sample/conf \
    /usr/share/sample/temp \
    /usr/share/sample/webapps \
    /usr/share/sample/work \
    /var/log/sample

次に、Tomcat をマルチインスタンス化させるにあたって、必要なファイルのコピーや、シンボリックリンクを張ります。

# ln -s /usr/share/tomcat6/bin/tomcat-juli.jar /usr/share/sample/bin/tomcat-juli.jar
# cp -p /etc/tomcat6/server.xml /usr/share/sample/conf/
# ln -s /etc/tomcat6/catalina.properties /usr/share/sample/conf/catalina.properties
# ln -s /var/log/sample /usr/share/sample/logs

これで、CATALINA_BASE の準備は終わりました。

次は、新しく作成したインスタンスの設定を適切に変更します。$CATALINA_BASE/conf/server.xml が主に変更する設定となります。マルチインスタンス化するにあたって、デフォルトのシャットダウンポート 8005 番や、AJP ポート 8009 番を他のインスタンスと衝突しないように変更する必要があります。

これで Tomcat の動作に必要な情報は一通り揃っていますが、今度は service コマンドを用いてインスタンスの起動や終了を可能にするため、init スクリプトを用意します。まずは、/etc/sysconfig/tomcat6/etc/sysconfig/<service_name> にコピーします。

# cp -p /etc/sysconfig/tomcat6 /etc/sysconfig/sample

コピーした /etc/sysconfig/<service_name> の内容を編集します。編集する箇所は CATALINA_BASE / CATALINA_TMPDIR / CATALINA_PID が該当するかと思います。それぞれ適切なディレクトリと PID ファイルパスを指定してください。

最後に、/etc/init.d/tomcat6 へのシンボリックリンク /etc/init.d/<service_name> を作成し、chkconfig コマンドでサービスを追加します。

# ln -s /etc/init.d/tomcat6 /etc/init.d/sample
# chkconfig --add sample

以上で、すべての準備は整いました。あとは $CATALINA_BASE/webapps/ ディレクトリ配下に WAR ファイル等を配置してサービスを起動したり、終了したりして動作を確認してください。

# service sample start
# service sample stop

0 件のコメント:

コメントを投稿