Apache + Tomcat 2集群 负载平衡(Linux环境)

Posted on

Apache + Tomcat 2集群 负载平衡(Linux环境) - Derek.Guo BLOG - BlogJava

Derek.Guo BLOG

BlogJava 首页 新随笔 联系 聚合 管理

随笔-82 评论-31 文章-0 trackbacks-0 Apache + Tomcat/*2集群 负载平衡(Linux环境)

Apache + Tomcat/*2集群 负载平衡(Linux环境)

说明:一台apache主机,两台tomcat主机

安装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 出现安装协议 按接受

即可。 2.设置环境变量 /#vi /etc/profile 在其最后加入 JAVA_HOME =/ usr / java / jdk1. 5 .0_02 CLASSPATH = .:$JAVA_HOME / lib:$JAVA_HOME / jre / lib PATH = $PATH:$JAVA_HOME / bin:$JAVA_HOME / jre / bin export JAVA_HOME CLASSPATH PATH

 保存退出

3.要使JDK在所有的用户中使用,可以这样:vi /etc/profile.d/java.sh在新的java.sh中输入以下内容: /#set java environment JAVA_HOME=/usr/java/jdk1.5.0_02 CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin 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.进入解压后的目录。进行配置: . / 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 文件
    在下/# ----- Execute The Requested Command -----------------
        /# Bugzilla 37848: only output this if we have a TTY
          if [ $have_tty -eq 1 ]; then
             echo "Using CATALINA_BASE:   $CATALINA_BASE"
             echo "Using CATALINA_HOME:   $CATALINA_HOME"
             echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
            if [ "$1" = "debug" -o "$1" = "javac" ] ; then
                echo "Using JAVA_HOME:       $JAVA_HOME"
            else
               echo "Using JRE_HOME:       $JRE_HOME"
            fi
           fi
        添加以下内容:
            CATALINA_OPTS = " $CATALINA_OPTS -Xms256m -Xmx512m -XX:PermSize=32m  -XX:MaxPermSize=128m $JPDA_OPTS "
            JAVA_OPTS = " $JAVA_OPTS -Djava.awt.headless=true "
            echo  " Using CATALINA_OPTS: $CATALINA_OPTS "
            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中

   ,所以不用再加载)

LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 2.配置文件添加 ProxyPass / balancer: // tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=on timeout=5 maxattempts = 3 ProxyPassReverse / balancer: // tomcatcluster/ < Proxy balancer: // tomcatcluster > BalancerMember ajp: // 192.168.40.15:8009 smax=2 loadfactor=1 route=tomca t1 BalancerMember ajp: // 192.168.71.106:8009 smax=2 loadfactor=2 route=tomc at2 </ Proxy >

    以上说明请参见mod_proxy中文手册 [http://www.6bee.com/tech/ApacheMenu/mod/mod_proxy.html](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 的
去掉注释 jvmRoute是tomcat路由标示,由此区分两台tomcat主机,那么第二台就改为 加上注释

2.修改tomcat 的 conf/server.xml 的<Connector> 
去掉注释<Connector port="8009"
           enableLookups="false" redirectPort="8443" debug="0"
           protocol="AJP/1.3" />   

3.修改tomcat 的 conf/server.xml 的<Cluster>   
<!--  
     < Cluster className = " org.apache.catalina.cluster.tcp.SimpleTcpCluster "
             managerClassName = " org.apache.catalina.cluster.session.DeltaManager "
             expireSessionsOnShutdown = " false "
             useDirtyFlag = " true "
             notifyListenersOnReplication = " true " >
         < Membership 
            className = " org.apache.catalina.cluster.mcast.McastService "
            mcastAddr = " 228.0.0.4 "
            mcastPort = " 45564 "
            mcastFrequency = " 500 "
            mcastDropTime = " 3000 " />
         < Receiver 
            className = " org.apache.catalina.cluster.tcp.ReplicationListener "
            tcpListenAddress = " auto "
            tcpListenPort = " 4001 "
            tcpSelectorTimeout = " 100 "
            tcpThreadCount = " 6 " />
         < Sender
            className = " org.apache.catalina.cluster.tcp.ReplicationTransmitter "
            replicationMode = " pooled "
            ackTimeout = " 5000 " />
         < Valve className = " org.apache.catalina.cluster.tcp.ReplicationValve "
               filter = " ./*\.gif;./*\.js;./*\.jpg;./*\.png;./*\.htm;./*\.html;./*\.css;./*\.txt; " />

         < Deployer className = " org.apache.catalina.cluster.deploy.FarmWarDeployer "
                  tempDir = " /tmp/war-temp/ "
                  deployDir = " /tmp/war-deploy/ "
                  watchDir = " /tmp/war-listen/ "
                  watchEnabled = " false " />

         < ClusterListener className = " org.apache.catalina.cluster.session.ClusterSessionListener " />
     </ Cluster >
     -->

把上面的注释拿掉 就ok 了!

4.在每个webapps应用中,修改web.xml文件 添加元素 最后完工,重启tomcat,apahce测试平衡负载,新建jsp页面 <% Runtime lRuntime = Runtime.getRuntime(); out.println("/// BEGIN MEMORY STATISTICS ///
"); out.println("Free Memory: "+lRuntime.freeMemory()/1024/1024+"M
"); out.println("Max Memory: "+lRuntime.maxMemory()/1024/1024+"M
"); out.println("Total Memory: "+lRuntime.totalMemory()/1024/1024+"M
"); out.println("Available Processors : "+lRuntime.availableProcessors()+"
"); out.println("/// END MEMORY STATISTICS ///"); %>
<%= request.getSession().getId() %> 放入到两台tomcat的ROOT目录中测试 再测试集群(session复制) posted on 2006-11-15 11:06 Derek.Guo 阅读(3196) 评论(0) 编辑 收藏 所属分类: Linux/Unix

新用户注册 刷新评论列表

找优秀程序员,就在博客园 IT新闻: · 开源Tizen系统视频泄露 外观似诺基亚MeeGo · Opera推出电视应用商店 提供HTML5应用 · CES 2012 开展前演讲:电子设备消费将达 1 万亿美元 · 分析师称苹果借转售NAND闪存获数十亿美元利润 · 爱创会:火花,火焰,火光 博客园 博问 IT新闻 Java程序员招聘 标题 请输入标题 姓名 请输入你的姓名 主页 请输入验证码 验证码 /* 内容(请不要发表任何与政治相关的内容) 请输入评论内容 Remember Me? 登录 [使用Ctrl+Enter键可以直接提交] 推荐职位: · 北京C++游戏服务端研发工程师(武神世纪网络) · 知识库技术编辑(博客园) · 北京Web系统工程师(嘉康利中国) · .NET 高级软件开发工程师(5173.com) · 中高级.NET程序员(沪江网) · 石家庄高级.NET工程师(月薪6K-8K)(盛安德科技)

博客园首页随笔: · 再论 Time stamp counter · 我在ZZ这八年 · 写在2012里的2011总结 · 高效程序员秘籍(8):养成使用网络笔记本、网络文件同步工具的习惯 · Ext.get()与Ext.fly()之区别 知识库: · 持续集成之“Everything is code” · 持续集成之“软件自我识别” · 持续集成之戏说Check-in Dance · 什么是闭包,我的理解 · 什么是闭包(Closure)? 网站导航:

博客园 IT新闻 知识库 C++博客 程序员招聘 管理 相关文章:

<2006年11月>日一二三四五六293031123456789101112131415161718192021222324252627282930123456789

留言簿(7)

随笔分类(80)

技术网站

积分与排名

  • 积分 - 107622
  • 排名 - 186

最新随笔

最新评论

阅读排行榜

MSN:envoydada@hotmail.com QQ:34935442

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途