1. 程式人生 > >[轉載]Tomcat單機多實例配置

[轉載]Tomcat單機多實例配置

connect mini ack popu 機器 pri 腳本 你在 startup

Tomcat單機多實例配置

當一個進程的線程超過500個的話,那麽這個進程的運行效率會變得很低。因為一個進程產生過多的線程,CPU資源會浪費在線程間切換過程當中。但當服務器配置很高的情況下,如:32G內存,16核的CPU。這樣一臺高配的機器上只裝一個Tomcat實例,會有點浪費。其實我們可以根據服務器的硬件配置,配置多個Tomcat實例,充分利用硬件的資源。你第一時間可能會想到,直接下載多份Tomcat安裝包,直接解壓,改下端口跑起來不就可以了? 這樣也是可以的,但不好維護。假設你在一臺機器上安裝了5個Tomcat實例,日後要升級Tomcat時,你需要將新版本的tomcat復制並覆蓋掉舊的5個tomcat安裝程序和配置,所以還是挺麻煩的。下面介紹多個Tomcat實例共享同一個安裝包的配置方法。

安裝環境

操作系統:CentOS7 64位 Mini版
JDK:1.8,安裝目錄:/opt/jdk1.8
Tomcat:Tomcat8.0.35,安裝目錄:/opt/apache-tomcat-8.0.35
配置3個Tomcat實例組件一個集群:
/opt/tomcat_instance/tomcat1
/opt/tomcat_instance/tomcat2
/opt/tomcat_instance/tomcat3

安裝步聚

1> 下載Tomcat安裝包並解壓,目錄結構如下:

drwxr-xr-x. 3 root root  4096 5月  26 01:41 bin
drwxr-xr-x. 3 root root  4096 6月  28 16:14 conf
drwxr-xr-x. 2 root root  4096 5月  25 22:12 lib
drwxr-xr-x. 2 root root  4096 6月  28 15:48 logs
drwxr-xr-x. 2 root root  4096 5月  25 22:12 temp
drwxr-xr-x. 7 root root  4096 5月  25 22:14 webapps
drwxr-xr-x. 3 root root  4096 5月  12 05:57 work

2> 在/opt/tomcat_instance下分別創建3個實例的目錄:

shell> mkdir -p /opt/tomcat_instance/tomcat1
shell> mkdir -p /opt/tomcat_instance/tomcat2
shell> mkdir -p /opt/tomcat_instance/tomcat3

3> 拷貝tomcat安裝目錄下的conf目錄分別放入3個實例目錄中

shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat1/
shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat2/
shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat3/

4> 在tomcat實例下創建實例啟動和停止腳本

啟動和停止腳本放到tomcat實例的bin目錄下

a) 啟動腳本

shell> mkdir -p /opt/tomcat_instance/tomcat[1-4]/bin
shell> touch startup.sh
shell> chown +x startup.sh

將以下腳本拷貝到startup.sh文件中,註意修改CATALINA_BASE指向的tomcat實例路徑:

#!/bin/bash
export JRE_HOME=/opt/jdk1.8/jre
export CATALINA_HOME=/opt/tomcat8
export CATALINA_BASE="/opt/tomcat_instance/tomcat1"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat1"

#創建logs目錄
if [ ! -d "$CATALINA_BASE/logs" ]; then
  mkdir $CATALINA_BASE/logs
fi

#創建temp目錄
if [ ! -d "$CATALINA_BASE/temp" ]; then
  mkdir $CATALINA_BASE/temp
fi

# 調用tomcat啟動腳本
bash $CATALINA_HOME/bin/startup.sh "$@"

b) 停止腳本

shell> touch shutdown.sh
shell> chown +x shutdown.sh
shell> vim shutdown.sh

拷貝以下腳本到shutdown.sh文件中:

#!/bin/bash
export JRE_HOME=/opt/jdk1.8/jre
export CATALINA_HOME=/opt/tomcat8
export CATALINA_BASE="/opt/tomcat_instance/tomcat1"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"

bash $CATALINA_HOME/bin/shutdown.sh "$@"

5、修改每個tomcat實例中server.xml中的端口

<Server port="8005" shutdown="SHUTDOWN">
  ...
  <Service name="Catalina">
    ...

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    ...

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    ...

    <Engine name="Catalina" defaultHost="localhost">
        ...
      <Host name="localhost"  appBase="/opt/deploy/webapps"
            unpackWARs="true" autoDeploy="true">
        ...
      </Host>
    </Engine>
  </Service>
</Server>

上面是裁剪過後的server.xml,分別修改以上三個端口(Server、HTTP、AJP),不要和其它實例的端口或系統已經占用的端口發生沖突。

6、創建實例部署應用的目錄

shell> mkdir -p /opt/deploy/webapps

所有實例的app默認都部署到/opt/deploy/webapps目錄下,註意修改server.xml中Host節點的appBase屬性的值。

7、啟動服務

shell> /opt/tomcat_instance/tomcat1/bin/startup.sh
shell> /opt/tomcat_instance/tomcat2/bin/startup.sh
shell> /opt/tomcat_instance/tomcat2/bin/startup.sh

服務器啟動之後,會分別在相應的實例目錄下生成logs、temp、work和webapps目錄。另外也可以在實例目錄下創建lib目錄,用於存放app的jar。現在來看實例的安裝目錄,就和tomcat的安裝包解壓後的目錄結構一樣了,但所有實例共享同一套tomcat安裝程序的bin和lib。後面如果需要升級tomcat或修改tomcat腳本的相關配置,只需要更新這一套程序就行,也方便了日後的維護。tomcat1實例的目錄結構如下:

[轉載]Tomcat單機多實例配置