zoukankan      html  css  js  c++  java
  • Apache + Tomcat 实现简单集群

    Apache2.2  Tomcat6 集群服务器配置

    引言

    既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢?原因有下面几个:

    1. 提升对静态文件的处理性能

    2. 利用 Web 服务器来做负载均衡以及容错

    3. 无缝的升级应用程序

    这三点对一个 web 网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个 Tomcat 宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server 了,它跟 tomcat 的结合是最紧密和可靠的。

     

     

    JK方式:

    A、准备工作

    Apachehttpd-2.2.19-win32-x86-no_ssl.msi

    Tomcatapache-tomcat-6.0.32 复制成tomcat1,tomcat2.(还可以更多)

    Mod_jkmod_jk-1.2.31-httpd-2.2.3.so 

    下载地址:http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/

    mod_jk-1.2.31-httpd-2.2.3.so  is for Apache 2.2.x. It has been build against version 2.2.3, but should work with Apache 2.2.0 and later. Rename to mod_jk.so before putting it in your Apache2.2/modules directory or adjust your LoadModule statement.(把mod_jk-1.2.31-httpd-2.2.3.so 改名成mod_jk.so 并放到Apache2.2/modules)不改名也行,实际运用的时候加载具体的名字。

     

    B、配置httpd.conf。

    httpd.conf Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息。

     

    打开apache中的httpd.conf配置文件 添加Include conf/mod_jk.conf 这句。

     

    C、在apache  conf目录中新建mod_jk.conf文件。

    配置如下:

    #加载mod_jk Module(用于Apachetomcat通信的桥梁)

    LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

     

    #指定 workers.properties文件路径(配置负载均衡用,下详)

    JkWorkersFile conf/workers.properties

     

    JkLogFile logs/mod_jk.log

     

    #配置路径跳转,指将那些请求发给tomcat

    JkMount /*.jsp controller

    JkMount /*.action controller

    JkMount /*.* controller

    JkMount /* controller #这个很有必要,否则一些servlet的请求则无法转发给tomcat(例如jfreechart中的显示图片的/DisplayChart

     

    D、在apache  conf目录中新建workers.properties.

    这个文件是Tomcat 服务器的连接定义文件。这个文件可以自己在conf目录下新建,也可以在tomcat-connectors-1.2.31-src中找一个来修改。(#表示注解,配置了一台机器上的两个工作端口)

    配置如下:

    workers.tomcat_home=D:\server\tomcat1,D:\server\tomcat2

    workers.java_home=D:\Java\jdk1.6.0_24

     

    worker.list = controller,tomcat1,tomcat2  #server 列表

    #========tomcat1========

    worker.tomcat1.port=8009         #ajp13 端口号,在tomcatserver.xml配置,默认8009

    worker.tomcat1.host=localhost    #tomcat的主机地址,如不为本机,请填写ip地址

    worker.tomcat1.type=ajp13

    worker.tomcat1.lbfactor = 1      #server的加权比重,值越高,分得的请求越多

    #========tomcat2========

    worker.tomcat2.port=8019         #ajp13 端口号,在tomcatserver.xml配置,默认8009

    worker.tomcat2.host=localhost    #tomcat的主机地址,如不为本机,请填写ip地址

    worker.tomcat2.type=ajp13

    worker.tomcat2.lbfactor = 1      #server的加权比重,值越高,分得的请求越多

    #========controller,负载均衡控制器========

    worker.controller.type=lb

    worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat

    worker.controller.sticky_session=1

    worker.loadbalancer.sticky_session=true  #session是否具有黏贴性(复制性)

     

    E、修改集群中tomcat的sever.xml文件。

    实验中的集群tomcatapache-tomcat-6.0.32版本的tomcat1tomcat2.因为是在同一台电脑上部署多个tomcat,所以需要修改一些端口号。

    1<Server port="8005" shutdown="SHUTDOWN"> 

    Tomcat18005 ,Tomcat28015.

    2<Connector port="8080" protocol="HTTP/1.1" 

                   connectionTimeout="60000" 

                   redirectPort="8443" />

    Tomcat180808443 ,Tomcat280818444.

    3)打开这段注释:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

    Tomcat1tomcat1 ,Tomcat2tomcat2

    4)打开这段注释:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    Tomcat180098443 ,Tomcat280198444

     

    (注意,上述修改需要跟workers.properties中的信息一致)

    4)在<Engine></Engine>中添加下面一段(可以在tomcat /docs/cluster-howto.html中找到):

          

            <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                     channelSendOptions="6">

     

              <Manager className="org.apache.catalina.ha.session.BackupManager"

                       expireSessionsOnShutdown="false"

                       notifyListenersOnReplication="true"

                       mapSendOptions="6"/>

              <!--

              <Manager className="org.apache.catalina.ha.session.DeltaManager"

                       expireSessionsOnShutdown="false"

                       notifyListenersOnReplication="true"/>

              -->        

              <Channel className="org.apache.catalina.tribes.group.GroupChannel">

                <Membership className="org.apache.catalina.tribes.membership.McastService"

                            address="228.0.0.4"

                            port="45564"

                            frequency="500"

                            dropTime="3000"/>

                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                          address="auto"

                          port="5001"

                          selectorTimeout="100"

                          maxThreads="6"/>

     

                <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

                  <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

                </Sender>

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

              </Channel>

     

              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                     filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

     

              <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                        tempDir="/tmp/war-temp/"

                        deployDir="/tmp/war-deploy/"

                        watchDir="/tmp/war-listen/"

                        watchEnabled="false"/>

     

              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

            </Cluster>

    Tomcat15001 ,Tomcat25002

     

    5<Host name="localhost"  appBase="D:/server/myApp"

                unpackWARs="true" autoDeploy="true"

                xmlValidation="false" xmlNamespaceAware="false">

    根据自己喜好,把apachetomact1tomcat2部署的项目放到指定的位置。也可以在tomcat1tomcat2中建立自己的虚拟目录。

    6)修改apache httpd.conf中的DocumentRootDocumentRoot "D:/server/myApp"

    F、建立D:/server/myApp目录。并把tomcat中拷贝host-managermanager目录文件到该目录下。然后拷贝测试项目 index.jsp,或者需要部署的项目到这目录下。例如hzsmptshop这两个项目

    H、启动tomcat1tomcat2apache。进行测试。

    当你在tomcat控制台上看到这样的信息的时候,说明两个tomcat已经集成了。

    然后输入:http://127.0.0.1/shophttp://127.0.0.1:8080/shop 以及http://127.0.0.1:8081/shop 的结果都是一样的。

    按照上述方法,可以配置tomcat3.tomcat4

  • 相关阅读:
    一、zuul如何路由到上游服务器
    一、hystrix如何集成在openfeign中使用
    一、ribbon如何集成在openfeign中使用
    二、openfeign生成并调用客户端动态代理对象
    一、openfeign的自动配置
    BootStrap【一、概述】
    JavaSpring【七、AspectJ】
    JavaSpring【六、AOP的API】
    JavaSpring【五、AOP基础】
    目录整理
  • 原文地址:https://www.cnblogs.com/chenzhao/p/2603423.html
Copyright © 2011-2022 走看看