Linux下Apache + Tomcat*2集群 负载平衡配置

安装JDK、安装Apache、安装Tomcat、

配置Apache代理、配置Tomcat集群

一、安装JDK(所有运行Tomcat主机,即web服务器
  1.下载 JDK 的bin包,如jdk-1_5_0_02-linux -i586.rpm.bin ,给其添加执行权限,执行#./jdk-1_5_0_02-linux-i586.rpm.bin , 在

当前目录生成rpm安装包,同样给其添加执行权限。 再执行 #rpm -ivh jdk-1_5_0_02-linux-i586.rpm 出现安装协议 按<Enter>接受

即可。
  2.设置环境变量 #vi /etc/profile  在其最后加入
  1. JAVA_HOME =/ usr / java / jdk1. 5 .0_02
  2.         CLASSPATH = .:$JAVA_HOME / lib:$JAVA_HOME / jre / lib
  3.         PATH = $PATH:$JAVA_HOME / bin:$JAVA_HOME / jre / bin
  4.         export JAVA_HOME CLASSPATH PATH
复制代码
保存退出

  3.要使JDK在所有的用 户 中使用,可以这样:vi /etc/profile.d/java.sh在新的 java.sh 中输入以下内容:
  1. #set java environment
  2.         JAVA_HOME=/usr/java/jdk1.5.0_02
  3.         CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  4.         PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
  5.         export JAVA_HOME CLASSPATH PATH
复制代码
保 存退出,然后给java.sh分配权限:chmod 755 /etc/profile.d/java.sh

二、安装Apache(访 问 代理主机)
  1.下载apache源代码 http://archive.apache.org/dist/httpd/httpd-2.2.2.tar.gz

解压缩 tar fvxz httpd-2.2.2.tar.gz

  2.进入解压后的目录。进行配置:
  1. . / configure  -- prefix =/ usr / apache  -- enable - module = most  -- enable - proxy  -- enable - proxy - ajp  -- enable - forward  -- enable - proxy - connect  -- enable - proxy - http  -- enable - so  -- enable - deflate  -- enable - headers  -- enable - include
复 制代码
上面的配置,用到了其他一些模块,说不定以后会用到,如支持ssi的include模块。

  3.编译(编译如果不成功,确认一下你的linux是否安装有编译所需要的c环境和其他需要的类库)
    make

  4.安装 make install


  5.进入/usr/apache目录,运行apache  ./apachectl -k start

      运行apache后,浏览一下是否运行正常。

    关闭apache ./apachectl -k stop


   6.把apache作为linux的启动就运行服务 程序
     执行如下操作:cp /usr/apache/bin/apachectl /etc/rc.d/init.d/httpd
     确认linux以前安装的httpd(apache)不需要了,你可覆盖掉以前apache的httpd文件
     chkconfig --add httpd
     运行linux的setup,把httpd服务默认设定为自动运行。
     到现在,你就可用另一种方式来启动、关闭apache了。如service httpd start


三、安装tomcat(Web 服 务器)
    1.下载jakarta-tomcat-5.5.20.tar.gz
      tar zxf jakarta-tomcat-5.5.20.tar.gz 解压文件 (如解压到/usr/local/)
    2.设置环境变量 #vi /etc/profile  添加
  CATALINA_HOME=/usr/local/jakarta-tomcat-5.5.30
  export CATALINA_HOME
      保存退出

    3.修改JVM内 存 :/bin/catalina.sh 文件
        在下
  1. # ----- Execute The Requested Command -----------------
  2.             # Bugzilla 37848: only output this if we have a TTY
  3.               if [ $have_tty -eq 1 ]; then
  4.                  echo "Using CATALINA_BASE:   $CATALINA_BASE"
  5.                  echo "Using CATALINA_HOME:   $CATALINA_HOME"
  6.                  echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
  7.                 if [ "$1" = "debug" -o "$1" = "javac" ] ; then
  8.                     echo "Using JAVA_HOME:       $JAVA_HOME"
  9.                 else
  10.                    echo "Using JRE_HOME:       $JRE_HOME"
  11.                 fi
  12.                fi
复制代码
添加以下内容:
  1. CATALINA_OPTS = " $CATALINA_OPTS -Xms256m -Xmx512m -XX:PermSize=32m  -XX:MaxPermSize=128m $JPDA_OPTS "
  2.                 JAVA_OPTS = " $JAVA_OPTS -Djava.awt.headless=true "
  3.                 echo  " Using CATALINA_OPTS: $CATALINA_OPTS "
  4.                 echo  " Using JAVA_OPTS: $JAVA_OPTS "
复 制代码
4.运行/usr/local/jakarta-tomcat-5.5.30/bin/startup.sh 启动tomcat服务器 测试是否正常
   
   

四、配置apache代理(适用mod_proxy_ajp.so)
    编辑apache配置文件 #vi /usr/apache/conf/httpd.conf
    1.配置proxy_ajp
#加载解析模块(windows下,或linux采用动态加载模式 下需配 置。前面我们的linux编译时把下面的模块嵌入到了apache中  

       ,所以不用再加载)
  1. LoadModule proxy_module modules/mod_proxy.so
  2. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
复 制代码
2.配置文件添加
  1. ProxyPass  /  balancer: // tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=on timeout=5  maxattempts = 3
  2. ProxyPassReverse  /  balancer: // tomcatcluster/
  3.   < Proxy balancer: // tomcatcluster >
  4.     BalancerMember ajp: // 192.168.40.15:8009 smax=2 loadfactor=1  route=tomca t1
  5.     BalancerMember ajp: // 192.168.71.106:8009 smax=2 loadfactor=2  route=tomc at2
  6.   </ Proxy >
复制代码
以上说明请参见 mod_proxy中文 手册 http://www.6bee.com/tech/ApacheMenu/mod/mod_proxy.html
    3.其他说明

1、apache对tomcat的支持历史:apache第2.1版本后,内置了proxy_ajp,而jk2已经没人开发 了,jk 则支持到apache的

2.0.58版本。
proxy_ajp配置较简单,但可配置性还不如jk2,主要表现在proxy_ajp目前只支持配置到目录,还不支持对文件名称的 pattern模式匹

配(即还不能定义到只对jsp文件起作用)。

2、因为proxy_ajp的配置,还不支持对文件名称的pattern模式匹配,所以你要特别注意:
——尽量把jsp和静态文件和图片路径分不同的目录来管理
——对于静态文件和图片路径,如/images,你可用“ProxyPass /images !”来禁止ProxyPass,从而 来让apache来直接处理图片的请

求。
——关于apache的ssi(即shtml,include)与tomcat的集成时,shtml文件不能处于ProxyPass 的控制下(即不能在ProxyPass目录)

,而shtml调用的jsp须在ProxyPass有效控制下;


五、配置Tomcat负载 均 衡、集群
    1.修改tomcat 的 conf/server.xml 的<Engine>      
    去掉注释<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">
        jvmRoute是tomcat路由标示,由此区分两台tomcat主机,那么第二台就改为
            <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">
    加上注释<Engine name="Catalina" defaultHost="localhost">
   
    2.修改tomcat 的 conf/server.xml 的<Connector>  
    去掉注释
  1. <Connector port="8009"
  2.                enableLookups="false" redirectPort="8443" debug="0"
  3.                protocol="AJP/1.3" />
复制代码
3. 修改tomcat 的 conf/server.xml 的<Cluster>
  1. <!--  
  2.          < Cluster className = " org.apache.catalina.cluster.tcp.SimpleTcpCluster "
  3.                  managerClassName = " org.apache.catalina.cluster.session.DeltaManager "
  4.                  expireSessionsOnShutdown = " false "
  5.                  useDirtyFlag = " true "
  6.                  notifyListenersOnReplication = " true " >
  7.              < Membership
  8.                 className = " org.apache.catalina.cluster.mcast.McastService "
  9.                 mcastAddr = " 228.0.0.4 "
  10.                 mcastPort = " 45564 "
  11.                 mcastFrequency = " 500 "
  12.                 mcastDropTime = " 3000 " />
  13.              < Receiver
  14.                 className = " org.apache.catalina.cluster.tcp.ReplicationListener "
  15.                 tcpListenAddress = " auto "
  16.                 tcpListenPort = " 4001 "
  17.                 tcpSelectorTimeout = " 100 "
  18.                 tcpThreadCount = " 6 " />
  19.              < Sender
  20.                 className = " org.apache.catalina.cluster.tcp.ReplicationTransmitter "
  21.                 replicationMode = " pooled "
  22.                 ackTimeout = " 5000 " />
  23.              < Valve className = " org.apache.catalina.cluster.tcp.ReplicationValve "
  24.                    filter = " .*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt; " />
  25.                   
  26.              < Deployer className = " org.apache.catalina.cluster.deploy.FarmWarDeployer "
  27.                       tempDir = " /tmp/war-temp/ "
  28.                       deployDir = " /tmp/war-deploy/ "
  29.                       watchDir = " /tmp/war-listen/ "
  30.                       watchEnabled = " false " />
  31.                      
  32.              < ClusterListener className = " org.apache.catalina.cluster.session.ClusterSessionListener " />
  33.          </ Cluster >
  34.          -->
复制代码
把上面的注释拿掉 就ok 了!

4.在每个webapps应 用 中,修改web.xml文件 添加元素<distributable/>

最后完工,重启tomcat,apahce测试平衡负载,新建jsp页面
  1. <%
  2. Runtime lRuntime = Runtime.getRuntime();
  3. out.println("*** BEGIN MEMORY STATISTICS ***<br/>");
  4. out.println("Free  Memory: "+lRuntime.freeMemory()/1024/1024+"M<br/>");
  5. out.println("Max   Memory: "+lRuntime.maxMemory()/1024/1024+"M<br/>");
  6. out.println("Total Memory: "+lRuntime.totalMemory()/1024/1024+"M<br/>");
  7. out.println("Available Processors : "+lRuntime.availableProcessors()+"<br/>");
  8. out.println("*** END MEMORY STATISTICS ***");
  9. %>
  10. <br>
  11. <%= request.getSession().getId() %>
复制 代码
放入到两台tomcat的ROOT目录中测试

再测试集群(session复制)
阅读更多
个人分类: 架构
想对作者说点什么? 我来说一句

apachetomcat负载集群的实现

2008年11月26日 241KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭