zoukankan      html  css  js  c++  java
  • window下tomcat集群和负载均衡

     在企业级应用中,采用Tomcat作为应用服务器的系统不在少数,但是Tomcat作为轻量级应用服务器,它的负载能力确实有限,在系统上线后不堪重负,这时候人们都会想起集群来,可惜以往的版本做起集群来,实在不方便得很。
          Tomcat5.5在这方面作了很大的改进,我们首先可以实现Tomcat5.5的集群。
     
    一、配置Tomcat
    1、直接将下载的apache-tomcat-5.5.17.zip解压缩到一个驱动器根目录下,将目录名改为Tomcat5517_S1,作为集群的第一个Tomcat服务器。
    2、删除Tomcat5517_S1/ webapps、Tomcat5517_S1/temp下的所有内容。
    3、在Tomcat5517_S1/conf/Catalina/localhost下建立ROOT.xml文件(注意:一定要用ROOT.xml这个文件名)。添加内容:
    <Context path="" docBase="发布路径" displayName="Tomcat_1"
      debug="0" privileged="true">
     
        <!-- Default set of monitored resources -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
     
    4、确认你的应用发布没有问题的情况下,运行Tomcat5517_S1/bin中的Startup.bat。
    5、在浏览器中访问:http://localhost:8080,你的应用应该可以在此Tomcat中成功发布了。
    这里要注意的是:
    如果你的系统中使用了Taglib尤其是c.tld,请下载最新版本的jakarta-taglibs-standard-1.1.2.zip,从中取得standard.jar、jstl.jar和c.tld,放在相应的目录下,然后修改web.xml:
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
     
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
    </web-app>
     
    其中所有的
      <taglib>
        <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
      </taglib>
     
    要放在<jsp-config>元素中,像这样:
    <jsp-config>
       <taglib>
         <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
         <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
       </taglib>
       <taglib>
    <taglib-uri>/WEB-INF/c.tld</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
       </taglib>
    </jsp-config>

    二、配置同一台机器中的Tomcat集群
    1、将Tomcat5517_S1/ Catalina文件夹改名为Tomcat5517_S1/ Standalone,然后打开Tomcat5517_S1/conf/server.xml,修改几个关键的地方。
    远程关闭Tomcat的服务端口,原来是8005,改为10005。
    ★ 两个对外服务的Connector的端口:Http协议端口原来是8080,改为10001;AJP1.3协议端口原来是8009,改为10009。(这里要注意的是在开始的调试阶段我们保持http协议端口的打开状态,用于浏览器直接与此Tomcat连接,等到调试成功后,所有的客户端只允许通过 apache访问,我们就要将提供Http协议的Connector关掉。)其中的redirectPort我都改成了10043。
    ★ 将原来的:<Engine name="Catalina" defaultHost="localhost">注释掉,打开它上面的:<Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat1">,并且将jvmRoute的值改为Tomcat1。
    ★ 打开Cluster元素的注释,并且将Receiver元素的监听端口tcpListenPort改为10011。
    2、修改Web.xml,加上<distributable/>,如下:
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
     
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
     <distributable/>
    </web-app>
     
    然后启动此Tomcat,可以看到有这样的提示信息:
    2006-6-28 13:33:57 org.apache.catalina.cluster.tcp.SimpleTcpCluster start
    信息: Cluster is about to start
    2006-6-28 13:33:57 org.apache.catalina.cluster.tcp.ReplicationTransmitter start
    信息: Start ClusterSender at cluster Standalone:type=Cluster,host=localhost with name Standalone:type=ClusterSender,host=localhost
    2006-6-28 13:33:57 org.apache.catalina.cluster.mcast.McastService start
    信息: Sleeping for 2000 milliseconds to establish cluster membership
    2006-6-28 13:33:59 org.apache.catalina.cluster.mcast.McastService registerMBean
    信息: membership mbean registered (Standalone:type=ClusterMembership,host=localhost)
    2006-6-28 13:33:59 org.apache.catalina.cluster.deploy.FarmWarDeployer start
    信息: Cluster FarmWarDeployer started.
    2006-6-28 13:34:30 org.apache.coyote.http11.Http11BaseProtocol start
    信息: Starting Coyote HTTP/1.1 on http-10001
    2006-6-28 13:34:30 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:10009
    2006-6-28 13:34:30 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/141  config=null
     
    这表示Tomcat集群正常启动了。
    3、复制Tomcat5517_S1文件夹,并更名为Tomcat5517_S2;然后修改Tomcat5517_S1/conf/server.xml,修改内容同上,要注意的是端口的修改:
    ★ 远程关闭Tomcat的服务端口,原来是8005,改为20005。
    ★ 两个对外服务的Connector的端口:Http协议端口原来是8080,改为20001;AJP1.3协议端口原来是8009,改为20009。其中的redirectPort我都改成了20043。
    ★ 将原来的:<Engine name="Catalina" defaultHost="localhost">注释掉,打开它上面的:<Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat2">,并且将jvmRoute的值改为Tomcat2。
    ★ 打开Cluster元素的注释,并且将Receiver元素的监听端口tcpListenPort改为20011。
    启动Tomcat2,可以看到有如下提示:
    在Tomcat1中:
    2006-6-28 14:25:46 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded
    信息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://192.168.1.192:20011,catalina,192.168.1.192,20011, alive=40]
     
    在Tomcat2中:
    2006-6-28 14:25:44 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded
    信息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://192.168.1.192:10011,catalina,192.168.1.192,10011, alive=3105085]
     
    这表示两个Tomcat已经建立了集群,并保持Session同步了

    三、配置Apache

    Apache2.2提供了最新的mod_proxy_balancer模块,这是我们这次实践过程中完成负载均衡的利器。安装完Apache之后,直接打开conf/httpd.conf文件:

    ★ 打开必要的模块:
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    ★ 在httpd.conf的最后加上:

    ProxyRequests Off

    ProxyPass / balancer://myCluster/
    <Proxy balancer://myCluster/>
           BalancerMember ajp://localhost:10009 route=Tomcat1
           BalancerMember ajp://localhost:20009 route=Tomcat2
    </Proxy>

    然后启动apache,开始测试你的应用在集群环境下的表现吧!

  • 相关阅读:
    JPEG图像压缩算法流程详解
    JPEG标准推荐的亮度、色度DC、AC Huffman编码表
    17软工- 第0次个人作业
    CNN炼丹瞎记录 mobilenet & se-resnet
    huggingface Bert的encode方法
    Failed to execute goal org.scala-tools:maven-scala-plugin:2.15.2:compile (compile) on project databus: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1(Exit value: 1)
    QT5实现消灭星星源码
    Hibernate介绍与简单使用示例代码
    Redis数据库介绍
    Failed to convert property value of type 'java.util.LinkedHashMap' to required type 'com.sun.javafx.collections.MappingChange$Map' for property
  • 原文地址:https://www.cnblogs.com/encounter/p/2189089.html
Copyright © 2011-2022 走看看