闲来无事学习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"