URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

CentOS 7でTomcatをマルチインスタンス

 一つのサーバ上でTomcatを複数動かすというのを仕事でやったのでメモ。
 これ自体は珍しくないけど、CentOSに含まれるものをそのまま利用するのはあまりやってなかった。

 CentOS 7の標準レポジトリから"yum install"でTomcatをインストールした場合、systemdには"tomcat.service"と"tomcat@.service"というのが登録されます。
 このうち、"@"がついているものがマルチインスタンス用のサービスです。
 以下、インスタンス名は「INST1」とします。

 まずは事前準備で環境情報ファイル"/etc/sysconfig/tomcat@INST1"を作成し、"CATALINA_BASE"を記述します。
 ※他にも必要に応じて追記する(例えば"JAVA_OPTS")。

CATALINA_BASE="/var/lib/tomcats/INST1"

 "CATALINA_BASE"に指定するパスは、通常は"/var/lib/tomcats/<インスタンス名>"にするようです。"/var/lib/tomcats"まではデフォルトで作られているみたいですね("シングルインスタンスの場合に一般的に使われる"/var/lib/tomcat"と紛らわしいですが)。

 続いて"CATALINA_BASE"と以下のディレクトリを作成します。

作成するディレクトリ(参考)シングルインスタンスの場合の既定値
/var/lib/tomcats/INST1/usr/share/tomcat
/var/lib/tomcats/INST1/conf/etc/tomcat
/var/lib/tomcats/INST1/logs/var/log/tomcat
/var/lib/tomcats/INST1/temp/var/cache/tomcat/temp
/var/lib/tomcats/INST1/webapps/var/lib/tomcat/webapps
/var/lib/tomcats/INST1/work/var/cache/tomcat/work

 こちらも必要に応じてシンボリックリンクを利用する("logs"を"/var/log/tomcat"配下にする等)。

# mkdir -p /var/lib/tomcats/INST1/{conf,logs,temp,webapps,work}
# chown -R :tomcat /var/lib/tomcats/INST1

 ディレクトリを作ったら、"/etc/tomcat"の中にある各種設定ファイルを"/var/lib/tomcats/INST1/conf"にコピーして修正。特に、インスタンスごとに使用するするTCPポート番号を変更する。
 設定については基本的に通常のTomcatと同じなので省略。

 ここまでの準備がきたら、インスタンス名を付与したサービスをsystemdで有効にする。

# systemctl enable tomcat@INST1
Created symlink from /etc/systemd/system/multi-user.target.wants /tomcat@INST1.service to /usr/lib/systemd/system/tomcat@.service.
# systemctl start tomcat@INST1

 これでTomcatが設定通り起動していれば完了。
 あとはインスタンスごとにこれを繰り返す。

 あまりディストリビューション標準のTomcatは使わない気もしますが、とりあえずこんな感じで。