tomcat+Apache+jk负载均衡集群配置方法

一。需要软件:tomcat6.0+apache2.2+mod_jk(符合apache2.2的,apache官网有下载...)

二。参考:略

三。环境:多台服务器。

四。安装。

主机A:apache,tomcatA,ip:192.168.1.20  ,apache端口80,tomcat端口8080

主机B tomcatB,ip:192.168.1.21,端口80

主机C tomcatC,ip:192.168.1.22,端口80

五。配置apache。

将下载的mod_jk(名字假如:mod_jk-1.2.28-httpd-2.2.3.so) 放在apache的modules文件夹下。并修改httpd.conf文件。搜索LoadModule。找到一大排#LoadModule xxx xxxx.so下面,加入

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

当然你也可以放在httpd.conf文件最后面,随大家爱好。。。,然后在http.conf最后面加入这几行

JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn

这个workers.properties和uriworkermap.properties名字随便取,但是后缀名要是properties。mod_jk.log同样也可以随便取名字,这个文件就是写日志的。JkLogLevel 日志等级,warn以上的都会写入日志,而这些文件将会放在根目录下的conf文件夹下。

workers.properties就是负责负载均衡的。而uriworkermap.properties则是设置哪些文件由apache处理,哪些文件由tomcat处理。

在conf文件夹下新建刚才说的workers.properties。在里面写:

worker.list=DLOG4J,status

#========tomcatA========
worker.tomcatA.port=8009
worker.tomcatA.host=192.168.1.20
worker.tomcatA.type=ajp13
worker.tomcatA.lbfactor = 1
#========tomcatB========
worker.tomcatB.port=8009
worker.tomcatB.host=192.168.1.21
worker.tomcatB.type=ajp13
worker.tomcatB.lbfactor = 1
#========tomcatC========
worker.tomcatC.port=8009
worker.tomcatC.host=192.168.1.22
worker.tomcatC.type=ajp13
worker.tomcatC.lbfactor = 1
#========controller,负载均衡控制器========
worker.DLOG4J.type=lb
worker.DLOG4J.balanced_workers=tomcatA,tomcatB,tomcatC
worker.retries=3
worker.DLOG4J.sticky_session=true
worker.status.type=status

其中port为tomcat下server.xml里的 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />对应端口。host值为对应主机,这里不要担心其他主机tomcat不为8080等其他端口,apache是通过ajp端口找到对应tomcat的。type的值为固定ajp13,这个值不能修改哦。lbfactor 的值就是均衡时apache访问tomcat的概率,如果3个tomcat的值都相等,那么服务设置了负载均衡的话,就会平均分发给各个tomcat,。controller下面就是负载均衡器了。type=lb表示负载均衡,balanced_workers表示指定哪些tomcat负载均衡,retries的值我现在还不明白什么意思。sticky_session=false 表示进行session复制,为true表示session不复制。详细见上面给的参考

接着在conf文件夹下新建uriworkermap.properties。在里面写下:

/*=DLOG4J
/jkstatus=status

!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J

status是刚才workers.properties文件中配置的,意思是由tomcat进行处理。哪些由tomcat处理呢?除了下面那些后缀的文件外,其他的都由tomcat处理,相信大家这时候都知道后面哪些由谁处理了,对,就是apache。当然你也可以增加其他类型文件由apache处理。

另:如果tomcatB下面有其他jsp应用的话,那么server.xml就要这样配置了:

<Host name="localhost"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
                <Alias>192.168.1.21</Alias>
                <Context docBase="集群应用" path="" reloadable="true" />
      </Host>

<Host name="其他应用"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
                <Context docBase="yyyy" path="" reloadable="true" />
      </Host>

localhost这个值请不要域名表示,因为apache是通过ip找到对应项目的。当然下面的"其他应用"可以使用域名表示。并不影响。

就这样apache就配置完了,接着是配置tomcat。

六。配置tomcat。

在每个tomcat的server.xml文件中,修改以下信息:

找到类似这样的:<Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcatA"> ,默认tomcat把这个给注释掉了,去掉注释,jvmRoute里面的值就是workers.properties中设置的tomcatA,tomcatB,tomcatC。然后在该标签内添加以下信息:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">
          <Manager className="org.apache.catalina.ha.session.BackupManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"
                    mapSendOptions="8"/>
          <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="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>
            <!-- timeout="60000"-->
            <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;"/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<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.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
     </Cluster>

还有一点,就是如果3个tomat都是放在同一台电脑上的话,ajp端口要设置不同,还有

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

找到这里,端口4000也要设置不同。。。。

这样,集群就配置好了,当然这个集群只是实现了其中的一种方式,就是第一次请求某个tomcat,后续的请求都会由这个tomcat进行处理。当然,这里session没有进行复制了。

如果想进行session复制,那么要修改workers.properties:worker.DLOG4J.sticky_session=false。

还要在项目中的web.xml文件下加上:<distributable/>

最后一点就是修改server.xml,在 <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcatA"> 标签下加上:

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

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

我就是没有加上这点,其他都设置好了,导致session无法复制。将以下这行注释掉:

<Manager className="org.apache.catalina.ha.session.BackupManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"
                    mapSendOptions="8"/>

改为:

<Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

这个mapSendOptions的值也有特殊含义,好像tomcat文档有讲解吧...

额,似乎就这些配置了,session可以复制了。但是我要说的是,这个session是可以复制,但也就是当session在创建或者消费的时候会进行复制,如果session进行更新操作,将无法复制。当然,也许是我少配置哪里了,如果谁这样配置了session更新了还可以复制的话,还希望在下面留个言,谢谢!在tomcat官网看到,

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

这个就是提供session复制的接口,不过tomcat6.0版本好像还没实现这个接口,导致session不能真正意义上复制了。

另外:session集群还会涉及到图片共享问题,如果多台服务器组成了局域网,可以使用jcifs上传图片到共享文件夹。当然还可以通过ftp上传了。

鼎峰胡佳雄
QQ.2881064155
Skype.live:2881064155

时间: 2024-10-20 11:02:46

tomcat+Apache+jk负载均衡集群配置方法的相关文章

LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置(DR模式,一个VIP,多个端口)

一.概述 LVS作用:实现负载均衡 Keepalived作用:监控集群系统中各个服务节点的状态,HA cluster. 配置LVS有两种方式: 1. 通过ipvsadm命令行方式配置 2. 通过Redhat提供的工具piranha来配置LVS 软件下载: ipvsadm下载地址: http://www.linuxvirtualserver.org/software/kernel-2.6/ Keepalived下载地址: http://www.keepalived.org/software/ 安装

Linux系统架构(LB-HA集群)-nginx负载均衡集群配置

nginx负载均衡集群配置 [[email protected] ~]# cd/usr/local/nginx/conf/vhosts/ [[email protected] vhosts]# ls default.conf  test.conf [[email protected] vhosts]# vim lb.conf upstream wang { server 192.168.137.21:80; server 192.168.137.23:80; } server { listen

Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53535435 Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而N

Nginx+Tomcat搭建高性能负载均衡集群(转)

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

Nginx+Tomcat搭建高性能负载均衡集群

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

Nginx+Tomcat搭建高性能负载均衡集群-Windows本地测试版

一.安装Tomcat和Nginx 首先安装两个apache-tomcat-8.0.41,下载地址:http://tomcat.apache.org 并安装一个nginx-1.13.0,下载地址http://nginx.org/en/download.html 都是绿色版,直接解压就能用,不需要进行环境变量之类的配置的. 这里碰到个小问题:公司电脑环境变量配的是jdk6,所以我的Tomcat8启动的时候黑窗口一闪而过,JDK版本不匹配的原因,把jdk6换成jdk8之后,Tomcat8正常启动. 二

【转载】Nginx+Tomcat搭建高性能负载均衡集群

最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都是过时了或者不全,最后找到一个测试过能成功的文章. 一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为a

使用Apache通过JK实现多Tomcat负载均衡集群时,Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题

前些天在做Apache通过JK实现多Tomcat负载均衡集群时,参考网上的配置将配置文件配置好后,访问已存在tomcat中的JSP文件时发现Apache提示URL不存在,然后检查了配置文件及tomcat工程部署,发现配置部署均无问题.尝试访问Apache静态页面,通过http单独访问tomcat均无问题.然后我猜会不会之前参考的网上的配置有问题,于是继续查询网上其它配置发现都差不多,尝试更改各种参数均没有解决.后来我仔细想了想出现这个问题的原因应该是Apache没有将HTTP请求分发给Tomca

使用Apache通过JK实现多Tomcat负载均衡集群实现总结及自己的感悟

第一次玩负载均衡集群,使用的是Apache.Tomcat,通过JK来实现.由于没有这方面经验,自己摸索了好多天,直到今天才基本完全搞定了.也了解了里面的一些相关原理,自己也亲自动手验证了一些原理.现将自己的经历过程和一些感悟总结分享一下,也以便自己日后查阅. 首先是下载Apache.Tomcat.JK,这没什么说的,主要注意一下需要的Apache的版本,然后是Apache.Tomcat集群相应的JK版本.版本不对的话会有问题.我自己在这里没遇到多大问题. 第一步,先做负载均衡,网上这方面的配置很