apache+JK+tomcat集群配置

7 篇文章 0 订阅
4 篇文章 0 订阅

转自:http://www.micmiu.com/architecture/cluster/apache-jk-tomcat-cluster/


文主要讲解如何在负载均衡的配置完成的基础上简单实现apache+JK+tomcat的集群配置(包括session复制)

有关apache+JK+tomcat负载均衡的安装及配置详见:http://www.micmiu.com/architecture/cluster/apache-jk-tomcat/

概述

  • 集群方式和之前blog中的负载均衡基本配置相同, Tomcat 中的集群原理是通过组播的方式进行节点的查找并使用 TCP 连接进行会话的复制。
  • 集群不同于负载平衡的是,由于集群服务需要在处理请求之间不断地进行会话复制,复制后的会话将会慢慢变得庞大,因此它的资源占用率是非常高的,如果在并发量大的应用中,复制的会话会变得相当大,而使用的总内存更是会迅速升高。
  • 但集群的会话复制,增加了系统的高可用性。由于在每台服务器都保存有用户的 Session 信息,如果服务器集群中某一台宕机,应用可以自动切换到其它服务器上继续运行,而用户的信息不会丢失,这提高了应用的冗错性。
  • 具体采用负载平衡还是集群,这要取决于实际应用的具体需求了。

下面讲述实现集群配置的修改:
tomcat官方参考文档:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
[一]实现集群的基本条件
如果要实现session复制,需要满足以下七点

  • 所有的session里的变量要实现序列化,继承java.io.Serializable
  • 去掉tomcat的conf/server.xml中Cluster的注释
  • 确认server.xml中定义好ReplicationValve
  • 如果tomcat实例运行同一台主机上,确保tcpListenPort的值唯一,一般情况下端口值的范围4000-4100
  • 确认web应用配置文件web.xml中有标签<distributable/>
  • 如果使用了mod_jk,那么<Engine name=”Catalina” jvmRoute=”node01″ >中jvmRoute属性值要和worker.properties中的定义一致
  • 确保集群中的所有节点的时间同步。
  • 确保负载均衡软件设置为session sticky模式

[二]具体配置修改
基本配置参见我的另一关于负载均衡配置的blog,里面讲得很详细
1、web.xml的根节点<webapp>下增加标签<distributable/>

2、server.xml中Cluster属性片段

1<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
2    channelSendOptions="8">
3 
4    <Manager className="org.apache.catalina.ha.session.DeltaManager"
5        expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />
6 
7    <Channel
8        className="org.apache.catalina.tribes.group.GroupChannel">
9        <Membership
10            className="org.apache.catalina.tribes.membership.McastService"
11            address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
12        <!-- 如果运行在同一台主机上port='4000'的值保证唯一,不能冲突 -->
13        <Receiver
14            className="org.apache.catalina.tribes.transport.nio.NioReceiver"
15            address="auto" port="4000" autoBind="100" selectorTimeout="5000"
16            maxThreads="6" />
17 
18        <Sender
19            className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
20            <Transport
21                className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
22        </Sender>
23        <Interceptor
24            className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
25        <Interceptor
26            className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
27    </Channel>
28 
29    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
30        filter="" />
31    <Valve
32        className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
33 
34    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
35        tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
36        watchDir="/tmp/war-listen/" watchEnabled="false" />
37 
38    <ClusterListener
39        className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
40    <ClusterListener
41        className="org.apache.catalina.ha.session.ClusterSessionListener" />
42</Cluster>

[三]总结

在我的配置和测试过程中得出以下几点:
1、sticky_session的值只是决定sessin是否具有粘性,并不像很多文章说的是指session复制
2、集群中tomcat的session能否复制取决于server.xml中的<Cluster>属性的定义
3、在测试中只要定义好<Cluster>属性,那么session复制就能实现了,和sticky_session的值没有关系,此时如果设置sticky_session=true,表示同时实现session粘性,即同一session会一直访问同一个tomcat,如果sticky_session=false,那么具体访问哪个tomcat是由分发控制器来决定的


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值