1.本FAQを公開する経緯
LifeKeeper for Linux のオプションリカバリーキットとして提供していた Generic ARK for Tomcatは、これまでOSに同梱されるTomcatのバージョンに対してサポートを提供して参りました。しかしながら Red Hat Enterprise Linux 8からTomcatパッケージの同梱を行わなくなり、Tomcat 8以降のバージョンに追従することが困難となりました。そのためGeneric ARK for TomcatはTomcat 7のEOSをもって提供終了させていただくこととなりました。
一方でTomcat8や9はリリースされており、これらをLifeKeeper for Linuxで保護して運用したいというユーザー様もいらっしゃるかと思います。そのためLifeKeeper for Linux 9.5.1 からはTomcatをQuick Service Protection(QSP)でリソース登録することが可能となりました。QSPを使用したTomcatを保護する手順について紹介します。
2.QSPを使用したリソース登録手順
QSPはLinuxのSystemdやServiceによるサービスの起動、停止、ステータス確認が行うプログラムを使用し、LifeKeeperの監視対象リソースとして登録を行います。そのためコミュニティから提供されているTomcat( apache-tomcat-9.0.**.tar.gz)を利用する場合は、以下のような方法でSystemdに登録をしてからQSPを使用してください。(既にsystemd に取り込まれている場合は、8までSKIPしてください)
1) SELinuxをdisabledに変更。
# cat /etc/sysconfig/selinux
SELINUX=disabled <--enforcing を disabled に変更してOS再起動を行う
2) Tomcat で使用するJava やコンパイラをインストールし、tomcat ユーザーを作成します。
# yum install java-11-openjdk java-11-openjdk-devel gcc make
# useradd -s /sbin/nologin tomcat
3) Tomcat9を展開して/opt以下に配置して、Native デーモン(jsvc)をコンパイルします。
Tomcatの配置とjsvcプログラムのコンパイル
# cd /opt
# tar zxvf /root/apache-tomcat-9.0.38.tar.gz
# cd apache-tomcat-9.0.38/bin
# tar zxvf commons-daemon-native.tar.gz
# cd commons-daemon-1.2.2-native-src/unix/
# ./configure --with-java=/usr/lib/jvm/jre
# make
jsvcプログラムの配置
# cp jsvc ../..
Tomcatの権限をtomcatユーザーに変更
# chown -R tomcat:tomcat /opt/apache-tomcat-9.0.38/
4) jsvcの起動確認を行います。
jsvc の起動
# /opt/apache-tomcat-9.0.38/bin/daemon.sh start
jsvcプロセスの起動確認
# ps aux | grep jsvc
tomcat 27456 0.0 0.0 18916 140 ? Ss 12:03 0:00 jsvc.exec -java-home /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64 -user tomcat -pidfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.pid -wait 10 -umask 0027 -outfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.38/bin/bootstrap.jar:/opt/apache-tomcat-9.0.38/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.38/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.38/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache-tomcat-9.0.38 -Dcatalina.home=/opt/apache-tomcat-9.0.38 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.38/temp org.apache.catalina.startup.Bootstrap
tomcat 27457 1.6 5.5 2600652 104620 ? Sl 12:03 0:06 jsvc.exec -java-home /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64 -user tomcat -pidfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.pid -wait 10 -umask 0027 -outfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.38/bin/bootstrap.jar:/opt/apache-tomcat-9.0.38/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.38/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.38/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache-tomcat-9.0.38 -Dcatalina.home=/opt/apache-tomcat-9.0.38 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.38/temp org.apache.catalina.startup.Bootstrap
root 27708 0.0 0.0 10280 1080 pts/0 R+ 12:10 0:00 grep --color=auto jsvc
jsvcの停止
# /opt/apache-tomcat-9.0.38/bin/daemon.sh stop
5) Tomcat9をsystemdに登録します。
/etc/systemd/system/tomcat.serviceファイルを作成して、以下の設定を行う。
# cat /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 9
After=lifekeeper.service
[Service]
User=tomcat
Group=tomcat
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/apache-tomcat-9.0.38/bin/daemon.sh start
ExecStop=/opt/apache-tomcat-9.0.38/bin/daemon.sh stop
ExecReStart=/opt/apache-tomcat-9.0.38/bin/daemon.sh stop;/opt/apache-tomcat-9.0.38/bin/daemon.sh start
[Install]
WantedBy=multi-user.target
*LifeKeeper で保護する場合は、lifekeeper.serviceより後に起動するよう"After"で指定する。
6) 作成したtomcat.serviceをsystemdで読み込るよう reloadします。リロード後にtomcatデーモンのstart, stop, restart が正常に稼働するかどうか確認します。
# systemctl daemon-reload
# systemctl start tomcat
# systemctl stop tomcat
# systemctl restart tomcat
7) 6までの手順で別のノードに対してもTomcatを導入します。
8) LIfeKeeper for Linux のGUIからリソースの作成を行います。Create Resource Wizardから「Quick Service Protection」を選択します。
9) Switch Back Typeを選択します。LifeKeeperでのデフォルトのIntelligentを選択します。
10) アクティブノードを選択します。
11) 保護するServiceを選択します。systemctl に登録されたサービスが表示されます*tomcatは バージョン9.5.1からQSPの利用が可能となりました。
12) 監視処理のEnable(有効)/Disable(無効)を選択します。
13) 選択したサービスを示す「サービス名」を入力します。デフォルトではQSP-<サービス名>で表示されます。「Create Instance」をクリックするとアクティブノード側のリソースの作成が開始されます。
14) リソースの作成が成功したことを確認して「Next」を選択します。
15) スタンバイノードを選択します。「Accept Defaults」をクリックするとデフォルトもしくはアクティブノードと同じ設定でスタンバイノードへのリソース拡張を行います。
16) 拡張に成功すると「以下のように表示されます。2ノードクラスターの場合は「Finish」で終了してください。
17) QSPによるTomcatの保護が完了します。
18) 動作テストを行います。以下のコマンドでtomcatを停止して、プロセスが止まったことを確認します。2分以内にローカルリカバリにてプロセスが再起動することを確認します。
Tomcat を停止
# systemctl stop tomcat
Tomcat のプロセスjsvcが停止したことを確認
# ps afx | grep jsvc
26668 pts/0 S+ 0:00 \_ grep --color=auto jsvc
* 2分待つ
jsvcが再起動したことを確認
# ps aux | grep jsvc
tomcat 27456 0.0 0.0 18916 140 ? Ss 12:03 0:00 jsvc.exec -java-home /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64 -user tomcat -pidfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.pid -wait 10 -umask 0027 -outfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.38/bin/bootstrap.jar:/opt/apache-tomcat-9.0.38/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.38/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.38/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache-tomcat-9.0.38 -Dcatalina.home=/opt/apache-tomcat-9.0.38 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.38/temp org.apache.catalina.startup.Bootstrap
tomcat 27457 1.6 5.5 2600652 104620 ? Sl 12:03 0:06 jsvc.exec -java-home /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64 -user tomcat -pidfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.pid -wait 10 -umask 0027 -outfile /opt/apache-tomcat-9.0.38/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache-tomcat-9.0.38/bin/bootstrap.jar:/opt/apache-tomcat-9.0.38/bin/commons-daemon.jar:/opt/apache-tomcat-9.0.38/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.38/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache-tomcat-9.0.38 -Dcatalina.home=/opt/apache-tomcat-9.0.38 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.38/temp org.apache.catalina.startup.Bootstrap
root 27708 0.0 0.0 10280 1080 pts/0 R+ 12:10 0:00 grep --color=auto jsvc
*ローカルリカバリの挙動は /var/log/lifekeeper.logにログが出力されます。
対象バージョン
LifeKeeper for Linux 9.5.1以降