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

posted @ 2012-07-22 08:23  attitudedecidesall  Views(399)  Comments(0Edit  收藏  举报