blog

CentOS 7 複数インスタンスでTomcatをスタンドアロン・インストールする

Apache Tomcatのシングル・マルチインスタンス配備方式とは、1台のサーバにマスター・アプリケーションを1セットだけインストールし、複数のアプリケーション・インスタンスを起動する方式です。この...

Sep 5, 2020 · 6 min. read
シェア

概要

Apache Tomcatのスタンドアロンマルチインスタンス配備方式では、1つのサーバに1セットのマスターアプリケーションのみをインストールし、アプリケーションの複数のインスタンスを起動します。この方式は主に次のような場合に使用されます:

  • 複数のTomcatマスターをコピーする必要がなくなり、ディスク容量を削減できます。
  • Tomcatのバージョンをアップグレードする場合は、1セットのインスタンスだけをアップグレードする必要があります。

Tomcat 一般的な導入シナリオ

  • 単一インスタンス単一アプリケーション: 最も一般的なデプロイオプションで、warパッケージをwebappsディレクトリにドロップするだけです。
  • シングルインスタンス・マルチアプリケーション:複数の Web アプリケーションが複数の WAR パッケージを生成し、これらの WAR はすべて webapps ディレクトリにドロップされます。
  • 1つのアプリケーションの複数のインスタンス:各インスタンスは1つのウェブアプリケーションのみでデプロイされ、各インスタンスは異なるポート番号を持ち、このソリューションはロードバランシングを達成するためにNginxと共に使用することができます。
  • マルチインスタンス・マルチアプリケーション:インスタンスごとに少なくとも1つのアプリケーションを展開します。このソリューションでは、サーバーのリソース割り当てが限られている場合やサーバーの同時実行数が少ない場合に、同じサーバー上に複数のアプリケーションを展開し、リソースを最大限に活用することができます。

Tomcatディレクトリ構成

  • bin スクリプトの実行
  • conf 設定ファイル
  • lib コア・ライブラリ・ファイル
  • logs
  • temp 一時ディレクトリ
  • webapps アプリケーション・ディレクトリ
  • work ランタイム・ディレクトリ

binとlibはTomcatのメイン・アプリケーション・ディレクトリとして使用され、複数のインスタンスで同じディレクトリを共有できます。各インスタンスにはconflogstempwebappsworkディレクトリが必要です。

複数インスタンスの配置

マルチインスタンス展開のシナリオを完成させるためには、CATALINA_HOMEとCATALINA_BASEを利用するのが主な方法です:

  • CATALINA_HOME:Tomcatのインストール・ディレクトリを示し、binとlibディレクトリを含むことができます。

CATALINAを使用する理由_BASE

デフォルトでは、CATALINA_HOMEとCATALINA_BASEは同じディレクトリを指します。Tomcatの複数のインスタンスを実行する場合は、主にCATALINA_BASEが各インスタンスのディレクトリを指すようにします。

インスタンスの配置

  1. Tomcatのダウンロード
$ wget -O /tomcat9.tar.gz https://../apache/tomcat/tomcat-9/..37/bin/apache-tomcat-....gz
  1. 解凍とインストール
$ mkdir /tomcat9
$ tar zxvf /tomcat9.tar.gz -C /tomcat9
  1. デーモンのインストール

Tomcatは、パブリック・デーモン内のデーモンとしてjsvcユーティリティを使用してLinuxプラットフォーム上で動作します。jsvcソース・パッケージはTomcatバイナリに含まれており、コンパイルする必要があります。

スクリプトを実行するときに、Java環境変数を設定する必要があります。または、スクリプトが呼び出されたときに、パラメータによってJava環境が設定されます。例えばJAVA_HOME./configure--with-java./configure --with-java=/usr/java

$ cd /tomcat9/bin
$ tar xvfz commons-daemon-native.tar.gz -C commons-daemon-native
$ cd commons-daemon-native commons-daemon-native
$ ./configure && make
$ cp jsvc ../..
  1. APRのインストール

APRは、複数のオペレーティング・システム・プラットフォームで使用可能な、上位層アプリケーションの基盤となるサポート・インターフェースのライブラリを提供します。

TomcatはAPRを使用することで、TomcatがオペレーティングシステムのAPIを直接呼び出すことができないという問題を解決し、より良いパフォーマンスをユーザーに提供することができます。

マストな環境:

  • APR 1.2+ develoment headers(libapr1-dev package)
  • OpenSSL 1.0.2+ development headers(libssl-dev package)
  • JNI header from Java compatible JDK 1.4+
  • GNU development environment(gcc, make)
$ yum install openssl -y
$ wget -O /apr.tar.gz https://../apache//apr/apr-....gz
$ wget -O /apr-util.tar.gz https://../apache//apr/apr-util-....gz
$ wget -O /apr-iconv.tar.gz https://../apache//apr/apr-iconv-....gz
$ tar zxvf apr.tar.gz -C /apr
$ tar zxvf apr-util.tar.gz -C /apr-util
$ tar zxvf apr-iconv.tar.gz -C /apr-iconv
$ NY /apr/configure --prefix=/usr/local/apr && NY /apr/make && NY /apr/make install
$ NY /apr-iconv/configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr && NY /apr-iconv/make && NY /apr-iconv/make install
$ NY /apr-util/configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv && NY /apr-util/make && NY /apr-util/make install
$ tar /tomcat9/bin/tomcat-native.tar.gz -C /tomcat9/bin/tomcat-native
$ NY /tomcat9/bin/tomcat-native/native/configure && NY /tomcat9/bin/tomcat-native/native/make && NY /tomcat9/bin/tomcat-native/native/make install

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>APRを有効にするには、server.xmlファイルのプロトコルを次のように変更する必要があります。org.apache.coyote.http11.Http11AprProtocol

  1. Tomcatインスタンスの作成

Tomcatインスタンスを作成するには、CATALINA_HOMEとCATALINA_BASEの環境変数を操作して実現する必要があり、複数のTomcatインスタンスを作成するには、conflogstempwebapps、これらの4つのコピーを何度も操作して実現する必要があり、今回は、2つのコピーをコピーするだけで実現します。

$ mkdir -p /tomcat9/instances/tomcat9_1
$ mv /tomcat9/conf /tomcat9/webapps /tomcat9/logs /tomcat9/temp -t /tomcat9/instances/tomcat9_1
$ cp /tomcat9/instances/tomcat9_1 /tomcat9/instances/tomcat9_2
  1. /tomcat9/instances/tomcat9_1/conf/server.xml/tomcat9/instances/tomcat9_2/conf/server.xmlTomcatインスタンス・ポートの変更 以下のような異なるポートに変更します:
  • Server ポート
  • Connector ポート
  1. Tomcatインスタンス・サービスの書き込み

システム・サービス・スクリプトを作成し、システム・サービス・スクリプトに tomcat9_1.service と tomcat9_2.service という名前を付けます。

  • tomcat9_1システム・サービスのCATALINA_BASE=/tomcat9/instances/tomcat9_1
  • tomcat9_2システム・サービスのCATALINA_BASE=/tomcat9/instances/tomcat9_2

/var/lib/systemd/system/スクリプトは、以下の主な内容のファイルの下に置く必要があります:

[Unit]
Description=Apache Tomcat 9 Web Service,AS Coding4fun Service
After=network.target
[Service]
Type=forking
ExecStart=/tomcat9/bin/jsvc \
 -java-home /jdk1.8.0_261 \
 -classpath /tomcat9/bin/bootstrap.jar:/tomcat9/bin/tomcat-juli.jar \
 -outfile /var/logs/catalina9_1.out \
 -errfile /var/logs/catalina9_1.err \
 -pidfile /var/run/tomcat9_1.pid \
 -Djava.library.path=/usr/local/apr/lib \ # APR 
 -Dcatalina.home=/tomcat9 \
 -Dcatalina.base=/tomcat9/instances/tomcat9_1 \
 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
 -Djava.util.logging.config.file=/tomcat9/instances/tomcat9_1/conf/logging.properties \
 org.apache.catalina.startup.Bootstrap
ExecStop=/tomcat9/bin/jsvc \
 -pidfile /var/run/tomcat9_1.pid \
 -stop \
 org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target

CentOS 7 システムサービススクリプトの書き方

注意

tomcat9_2 インスタンスは、上記のスクリプトの tomcat9_1 をすべて tomcat9_2 に置き換える必要があります。

  1. システム・サービスの作成
$ systemctl enable tomcat9_1.service
$ systemctl enable tomcat9_2.service
  1. システム・サービスの起動
$ systemctl start tomcat9_1
$ systemctl start tomcat9_2
  1. システムサービスが正常に開始されたかどうかを確認します。
$ systemctl status tomcat9_1
$ systemctl status tomcat9_2
Read next