2008年11月26日水曜日

バージョンの異なる複数のTomcatを立ち上げる

ひょんなことから、RHEL4.2の環境に、バージョンの異なる複数のTomcatを
立ち上げることになりました。
ついでに、ApacheやJavaもバージョンを分けることに。
一緒でいいじゃん、って思うんですが、アプリ側の動作検証が絡んでいるようで・・・

頭では、インストール先を分けて、待ちうけポートも分けてやればできるかな、
的にしか思っていないので、実際に「出来るのか???」を
検証しながら書き連ねていきます。

なお、検証途中なので、見ている最中に修正とか入るかもしれませんw

  • 本番環境はRHEL4.2なんですが、とりあえず検証ではCentOS 4.4を使用します。
  • ベースは以下のパッケージがインストール済みの環境とします。
    • CentOS 4.4
    • Apache 2.0.55
    • tomcat 5.028
    • Java 1.4.2
  1. ApacheとTomcatはmod_jkを利用して連携します。インストール方法はググるといっぱい出てくるので割愛。
  2. では、これから本番。まずはJDK(最新版)のインストール。(と、その前に既存のApacheとTomcatを停止しておきます。)

     http://java.sun.com/j2se/1.5.0/ja/download.htmlから最新版をダウンロードします。
    #chmod +x jdk-1_5_0_16-linux-i586-rpm.bin
    # ./jdk-1_5_0_16-linux-i586-rpm.bin

    ...<省略>...

    Do you agree to the above license terms? [yes or no]
    yes
    Unpacking...
    Checksumming...
    0
    0
    Extracting...
    UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
    inflating: jdk-1_5_0_16-linux-i586.rpm
    Preparing... ########################################### [100%]
    1:jdk ########################################### [100%]

    Done.

    入りました。
    # cd /usr/java
    # ls
    j2sdk1.4.2_18 jdk1.5.0_16

    しっかり2つ入っています。後はこれをJAVA_HOMEとPATH環境変数で切り替えるだけです。

  3. Tomcat 5.5(最新版)のインストール
    java 1.5(最新版)を入れたので、Tomcat 5.5(最新版)を導入します。当然、今回の主旨である、複数バージョンを立ち上げるのが前提条件なので、古いTomcatは削除しません。

    まずはTomcatホームページからapache-tomcat-5.5.27.tar.gzをDownload。
    # tar -xzf apache-tomcat-5.5.27.tar.gz
    バイナリ版なので、makeとか要りません。そのまま解凍されたフォルダをコピー。/optに入れます。
    # mv -f apache-tomcat-5.5.27 /opt/tomcat5.5
    # cd /opt/
    # ls -l
    合計 8
    drwxr-xr-x 11 tomcat tomcat 4096 11月 25 20:47 tomcat5.0
    drwxr-xr-x 11 root root 4096 11月 26 00:32 tomcat5.5

    とりあえず、ディレクトリを分けた。
    次はセキュリティ対策の為の専用ユーザ設定。

    # useradd -d /opt/tomcat5.5 -s /sbin/nologin tomcat55
    # chown -R tomcat55. /opt/tomcat5.5
    # ls -l
    合計 8
    drwxr-xr-x 11 tomcat tomcat 4096 11月 25 20:47 tomcat5.0
    drwxr-xr-x 11 tomcat55 tomcat55 4096 11月 26 00:36 tomcat5.5

    これでtomcatのインストールは終わり。
  4. Tomcatの起動ファイルをわける。

    Tomcat(旧)は既にApache Commons Daemonでデーモン化しています。
    同じ方法でTomcat(新)についてもデーモン化します。

    Commons-DaemonファイルをTomcat(新)を入れたフォルダから抜き出します。
    ・・・、とその前に、JAVA_HOMEとPATHをJDK 1.5側に切り替えます。
    # export JAVA_HOME=/usr/java/jdk1.5.0_16/
    # export PATH=$JAVA_HOME/bin:$PATH

    では改めて。
    # cd /opt/tomcat5.5/bin
    # cp -p jsvc.tar.gz /tmp
    # cd /tmp
    # tar -xzf jsvc.tar.gz
    # cd jsvc-src/
    # autoconf
    # sh configure

    ...<省略>...

    Now you can issue "make"
    # make

    ...<省略>...

    # chown tomcat55. jsvc
    # mv -f jsvc /opt/tomcat5.5/bin

    起動スクリプトを/etc/rc.d/init.d/にコピーしてあげます。ただし、ファイル名はTomcat(旧)と被らないように注意。

    # cd /tmp/jsvc-src/native/
    # cp -p Tomcat5.sh /etc/rc.d/init.d/jsvc-tomcat55
    # chmod +x /etc/rc.d/init.d/jsvc-tomcat5

    コピーして実行権を与えたら、viエディタで開いて、以下のように修正します。

    # vi /etc/rc.d/init.d/jsvc-tomcat55

    #!/bin/sh
    # chkconfig: - 80 20
    # description: jsvc-tomcat55
    # Adapt the following lines to your configuration
    JAVA_HOME=/usr/java/jdk1.5.0_16
    CATALINA_HOME=/opt/tomcat5.5
    DAEMON=$CATALINA_HOME/bin/jsvc
    TOMCAT_USER=tomcat55

    # for multi instances adapt those lines.
    TMP_DIR=/var/tmp
    PID_FILE=/var/run/jsvc2.pid
    CATALINA_BASE=/opt/tomcat5.5

    CATALINA_OPTS=
    CLASSPATH=\
    $JAVA_HOME/lib/tools.jar:\
    $CATALINA_HOME/bin/commons-daemon.jar:\
    $CATALINA_HOME/bin/bootstrap.jar

    case "$1" in
    start)
    #
    # Start Tomcat
    #
    $DAEMON \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

    stop)
    #
    # Stop Tomcat
    #
    $DAEMON \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

    *)
    echo "Usage tomcat.sh start/stop"
    exit 1;;
    esac
  5. 起動ファイルの準備ができても、まだ起動してはいけません。今度は、Tomcat(新)側のserver.xmlの内容を書き換えてあげます。

    # cd /opt/tomcat5.5/conf
    # vi server.xml


    <server port="8005" shutdown="SHUTDOWN">
    →"8005"を空いているTCP Port番号に変更(試しに"9005"にします)


    <!-- Define the Tomcat Stand-Alone Service -->
    <service name="Catalina">
    →念のため、ここを"Catalina"から"Catalina2"に変えます。


    <!-- <connector port="8080" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" redirectport="8443" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true"> -->
    →上記のように8080のConnection portは全体をコメントアウトします。


    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <connector port="8009" enablelookups="false" redirectport="8443" protocol="AJP/1.3">
    →AJPポートは"8009"から"9009"に変更します。redirectPortはSSL通信するならそちらのポートへ。


    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaulthost="localhost">
    →Engine nameを"Catalina"から"Catalina2"へ、また、"localhost"の後のスペースに続いて、 jvmRoute="tomcat2"を追加します。
  6. 次にworkers.propertiesを編集します。
    # cd /etc/httpd/conf
    # vi workers.properties

    ↓の2箇所はコメントアウト。
    # workers.tomcat_home=/var/tomcat3
    # workers.java_home=/opt/IBMJava2-13

    worker.list=tomcat1, tomcat2, jkstatus

    worker.tomcat1.port=8009
    worker.tomcat1.host=localhost
    worker.tomcat1.type=ajp13

    worker.tomcat2.port=9009
    worker.tomcat2.host=localhost
    worker.tomcat2.type=ajp13

    worker.jkstatus.type=status

    worker.tomcat1.lbfactor=1
    worker.tomcat2.lbfactor=1
  7. 次にhttpd.confをいじる。

    LoadModule jk_module modules/mod_jk.so


    <ifmodule>
    JkWorkersFile /etc/httpd/conf/workers.properties
    JkLogFile /var/log/httpd/mod_jk.log
    JkMount /servlets-examples/* tomcat1
    JkMount /jsp-examples/* tomcat2
    JkMount /jkstatus jkstatus
    JkMount /tomcat1/* tomcat1
    JkMount /tomcat2/* tomcat2
    </ifmodule>
    今回は/jsp-examples/*ならtomcat2(新)へ、/servlets-examples/*ならtomcat1(古)へ行くようにします。

    また、バージョン確認を分かりやすくするため、本来、webapps/ROOTにあるindex.jspと画像ファイルを、webapps/tomcat1/、webapps/tomcat2にそれぞれコピーします。

    # cd /opt/tomcat5.0/webapps
    # cp -rp ROOT tomcat1

    # cd /opt/tomcat5.5/webapps
    # cp -rp ROOT tomcat2

  8. 起動テスト。

    # ./jsvc start
    # ./jsvc-tomcat55 start
    # ps -eaf | grep jsvc
    root 14050 14001 0 01:02 pts/2 00:00:00 vim jsvc
    root 14071 1 0 01:26 ? 00:00:00 jsvc.exec -user tomcat -home /usr/java/j2sdk1.4.2_18 -Dcatalina.home=/opt/tomcat5.0 -Djava.io.tmpdir=/tmp -outfile /opt/tomcat5.0/logs/catalina.out -errfile &1 -cp /usr/java/j2sdk1.4.2_18/lib/tools.jar:/opt/tomcat5.0/bin/commons-daemon.jar:/opt/tomcat5.0/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap
    tomcat 14072 14071 27 01:26 ? 00:00:10 jsvc.exec -user tomcat -home /usr/java/j2sdk1.4.2_18 -Dcatalina.home=/opt/tomcat5.0 -Djava.io.tmpdir=/tmp -outfile /opt/tomcat5.0/logs/catalina.out -errfile &1 -cp /usr/java/j2sdk1.4.2_18/lib/tools.jar:/opt/tomcat5.0/bin/commons-daemon.jar:/opt/tomcat5.0/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap
    root 14092 1 0 01:26 ? 00:00:00 jsvc.exec -user tomcat55 -home /usr/java/jdk1.5.0_16 -Dcatalina.home=/opt/tomcat5.5 -Dcatalina.base=/opt/tomcat5.5 -Djava.io.tmpdir=/var/tmp -wait 10 -pidfile /var/run/jsvc2.pid -outfile /opt/tomcat5.5/logs/catalina.out -errfile &1 -cp /usr/java/jdk1.5.0_16/lib/tools.jar:/opt/tomcat5.5/bin/commons-daemon.jar:/opt/tomcat5.5/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap
    tomcat55 14093 14092 41 01:26 ? 00:00:07 jsvc.exec -user tomcat55 -home /usr/java/jdk1.5.0_16 -Dcatalina.home=/opt/tomcat5.5 -Dcatalina.base=/opt/tomcat5.5 -Djava.io.tmpdir=/var/tmp -wait 10 -pidfile /var/run/jsvc2.pid -outfile /opt/tomcat5.5/logs/catalina.out -errfile &1 -cp /usr/java/jdk1.5.0_16/lib/tools.jar:/opt/tomcat5.5/bin/commons-daemon.jar:/opt/tomcat5.5/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap
    root 14108 13189 0 01:26 pts/1 00:00:00 grep jsvc

    見事に2つ起動しています。
    で、httpdを起動。
    # ./httpd start
    httpd を起動中: [ OK ]


  9. さぁ、http://localhost/tomcat1/、http://localhost/tomcat2/
    などにアクセスして試してみましょう!(テスト中w)

 

0 件のコメント: