• Linux 下启动两个tomcat


    闲来无事学习nginx,想要配置个load balance。可是先决条件是:得有两个web容器。两个电脑是不用想了。只能想办法在一个机器上启动两个tomcat。原以为挺简单的,只要改改port就好了。谁知单单改port压根不会成功。网上找了很多解决方案,要么繁杂的要死,要么说的云里雾里的。于是决定结合网上的说法和自己的想法,重新写一个方案。

    先说解决方案吧。(我用的是tomcat-7.0.62,安装的路径是/usr/local/apache-tomcat-7.0.62)

    1.先把原来的tomcat复制一份,地址随便放,文件名随便取。我复制为 /usr/local/apache-tomcat-7.0.62-copy

    2.修改/usr/local/apache-tomcat-7.0.62-copy/conf/server.xml,用意是不要让端口与原来的冲突了

      在此server.xml中一共有三个port,下面列出的是默认的设置。这三个端口都要修改。(我一开始的想法是只要简单的后面加个1,变成80051,80801,80091,反正只要端口最大不超过65535就行了。结果报什么端口out of range 错误。。。。。)好吧,那就分别改为8006,8081,8010好了

    1 <!--这个好像是关闭的端口,具体作用不清楚-->
    2 <Server port="8005" shutdown="SHUTDOWN">
    3  
    4 <!--这个应该知道是什么端口吧-->
    5  <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000“ redirectPort="8443" />
    6  
    7  
    8  <!--注释上说是什么AJP 1.3的连接端口,具体什么作用还是不清出-->
    9  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    3.在~/.bash_profile中添加下面两个。 

    1 export CATALINA_BASE2=/usr/local/apache-tomcat-7.0.62-copy
    2 export CATALINA_HOME2=/usr/local/apache-tomcat-7.0.62-copy

    修改完成后用命令 source ~/.bash_profile使新配置的环境变量生效

     可以看到这两行的作用是添加环境变量,但是添加环境变量的方法并不只这一种。所以无论用什么方法,达到添加这两个环境变量的目的就行了。

    4.修改/usr/local/apache-tomcat-7.0.62-copy//bin/catalina.sh, 在开头的位置添加下面绿色的两行。(差不多就是在catalina.sh开始的位置)

     1 # resolve links - $0 may be a softlink
     2 PRG="$0"
     3 
     4 while [ -h "$PRG" ]; do
     5   ls=`ls -ld "$PRG"`
     6   link=`expr "$ls" : '.*-> (.*)$'`
     7   if expr "$link" : '/.*' > /dev/null; then
     8     PRG="$link"
     9   else
    10     PRG=`dirname "$PRG"`/"$link"
    11   fi
    12 done
    13 
    14 # Get standard environment variables
    15 PRGDIR=`dirname "$PRG"`
    16 
    17 # Only set CATALINA_HOME if not already set
    18 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    19 
    20 # Copy CATALINA_BASE from CATALINA_HOME if not already set
    21 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
    22 
    23 CATALINA_HOME=$CATALINA_HOME2
    24 CATALINA_BASE=$CATALINA_BASE2

    5. 分别启动两个tomcat就好了。

    好吧,下面的东西是我自己看catalina.sh的解释,与启动两个tomcat没有任何关系。

    上面第四步的那一段代码的目的就是取得 CATALINA_HOME和CATALINA_BASE。

      一开始这一段是说如果sh是链接的话的处理方法。$0就是bash文件的名称。

     1 # resolve links - $0 may be a softlink
     2 PRG="$0"
     3 
     4 while [ -h "$PRG" ]; do
     5   ls=`ls -ld "$PRG"`
     6   link=`expr "$ls" : '.*-> (.*)$'`
     7   if expr "$link" : '/.*' > /dev/null; then
     8     PRG="$link"
     9   else
    10     PRG=`dirname "$PRG"`/"$link"
    11   fi
    12 done

     下面有一句就是取得bash所在的文件夹。

    1 # Get standard environment variables
    2 PRGDIR=`dirname "$PRG"`

    再下面注释写的很清楚了,如果我们配置了CATALINA_HOME的环境变量,那就什么都不干,如果没有配置,那就让变量CATALINE_HOME指向 PRGIDR的父目录,实际就是tomcat安装目录。

    1 # Only set CATALINA_HOME if not already set
    2 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    3 
    4 # Copy CATALINA_BASE from CATALINA_HOME if not already set
    5 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

    我们的修改的意思是不管前面CATALINA_HOME和CATALINA_BASE设置为了什么,反正最后我一刀切,全设置为我想要的,即如下的代码

    1 CATALINA_HOME=$CATALINA_HOME2
    2 CATALINA_BASE=$CATALINA_BASE2

    下面还有一个说明:

    理论上来讲上面的配置就可以了。可是有一点小小的瑕疵:假设环境变量$CATALINA_HOME2$CATALINA_BASE2是设在root用户下的,那么tomcat救只能用root用户启动了,别的用户根本启动不了。

    并且,如果某个不知道catalina.sh已经被修改过的人复制apache-tomcat-7.0.62-copy到另外的地方,比如另一台服务器,他会发现tomcat启动不了了。。。其实catalina.sh这么写更好,即把绿色的那两行往前移一移就好了

     1 # resolve links - $0 may be a softlink
     2 PRG="$0"
     3 
     4 while [ -h "$PRG" ]; do
     5   ls=`ls -ld "$PRG"`
     6   link=`expr "$ls" : '.*-> (.*)$'`
     7   if expr "$link" : '/.*' > /dev/null; then
     8     PRG="$link"
     9   else
    10     PRG=`dirname "$PRG"`/"$link"
    11   fi
    12 done
    13 
    14 # Get standard environment variables
    15 PRGDIR=`dirname "$PRG"`
    16 
    17 CATALINA_HOME=$CATALINA_HOME2
    18 CATALINA_BASE=$CATALINA_BASE2
    19 
    20 # Only set CATALINA_HOME if not already set
    21 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    22 
    23 # Copy CATALINA_BASE from CATALINA_HOME if not already set
    24 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
  • 相关阅读:
    Error: listen EADDRINUSE: address already in use :::80报错解决
    kettle连接oracle
    Oracle 11g RAC使用Manual和Policy Managed方法配置
    Veritas NetBackup命令行添加ESXi主机,即时恢复虚拟机操作方法。
    在 ESXi 主机上关闭无响应的虚拟机电源 (1004340)
    [bug]记一次同步数据问题排查
    关于cmake和开源项目发布的那些事(PF)
    React 配置 @ 路径别名
    react httpproxymiddleware 跨域处理
    reactrouterconfig (嵌套路由)使用
  • 原文地址:https://www.cnblogs.com/formyjava/p/4645531.html
Copyright © 2020-2023  润新知