tomcat+apache+jk集群、负载均衡

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

二。参考:http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html

     

三。环境:多台服务器。

四。安装。

     主机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下面,加入

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

    

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

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

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

       其中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。在里面写下:

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

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

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

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

六。配置tomcat。

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

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

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

 

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

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

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

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

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

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

改为:

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

 

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

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

 

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值