閑來無事學習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"