高性价比开源软件集群(3)--tomcat apache集群

来源:互联网 发布:c语言一维数组删除重复 编辑:程序博客网 时间:2024/04/27 15:42

前面介绍了数据库的集群,现在我们接着来研究Web层面的集群.

由于笔者使用JAVA开发Web应用程序,用到了tomcat,这里介绍tomcat集群,tomcat本身不能单独集群,要和apache结合才能达到集群的目的.apache接收请求,然后使用负载均衡器均匀的把请求发送到每个不同的tomcat中.

软件:apache-2.24   tomcat-5.5.23 mod_jk-2.24  linux-ubuntu-server-6.10 vmware-5.5

1.配置apache,在配置文件后加上

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "conf/workers.properties"
JkLogFile "logs/mod_jk2.log"
JkLogLevel debug
JkMount /*.jsp controller

在conf下创建workers.properties,内容如下:


worker.list = controller,tomcat1,tomcat2 

worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1    

worker.tomcat2.port=9009
worker.tomcat2.host=localhost 
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 

worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2  
worker.controller.sticky_session=1

为了防止两进程占用一个端口,第二个tomcat2的port改为9009(后面在配置文件中也要改8009为9009,这个port是tomcat与apache的通讯port)

2.配置tomcat

取消tomcat1和tomcat2的配置文件server.xml中

<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="15000"
                waitForAck="true"/>

            <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>

两端的注释,上面的配置内部在tomcat2中要把tcpListenPort="4001"改为tcpListenPort="4002",防止端口占用

在<Engine name="Catalina" defaultHost="localhost">中添加 jvmRoute="tomcat1"使之成为

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

tomcat2中相应的改为

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

这里面的字符串tomcat1和tomcat2要对应worker.properties中的tomcat1和tomcat2.

tomcat除了与apache的通讯port外,内部还使用了一些port,所以相应的要把tomcat2中与tomcat1中相同的port全改掉,分别是:

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

<Connector port="8080" maxHttpHeaderSize="8192"
       maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
       enableLookups="false" redirectPort="8443" acceptCount="100"
       connectionTimeout="20000" disableUploadTimeout="true" />

<Connector port="8009"
       enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

把上面的端口号分别改为9005,9080,9009(其它数字也行).

上面的步骤就实现了web jsp请求负载均衡以及session在不同tomcat之间的复制.

若只要实现apache与tomcat结合,用apache处理请求,tomcat作jsp,servlet容器,则只需步骤一,tomcat的配置不用作任何更改.

下面是我的配置文件:

 

此文参考了下列文章:

http://hi.baidu.com/luodaijun/blog/item/5bbe4cfb5ffef864034f56a1.html

原创粉丝点击