Tomcat官方的集群(Cluster)配置说明

当单台Tomcat无法应对大量请求时,可以采用集群和Session共享来提高服务可用性。Tomcat官方提供内置Cluster功能,通过配置每个实例的Engine、应用的web.xml以及Cluster设置,实现Session数据在多个Tomcat实例间的共享。集群配置涉及jvmRoute、distributable标签、负载均衡和心跳检测。Tomcat的Session管理策略包括内存共享、文件系统或数据库持久化。本文还讨论了Session过期、禁用Cookie后的处理以及源码分析。

我们都知道,为了应对大量的请求,单台的Tomcat不能满足的时候,需要采取一系列的措施,例如分流、集群等。

进行Tomcat集群的时候,最需要关注和实现的,是多个Tomcat实例间的Session数据的共享,这样在节点crash的时候,才能使用其他节点响应。

关于集群,Tomcat的commiter和主要维护人Mark Thmoas在ApacheCon上做

Cluster的分享时这样描述:

什么时候需要使用Cluster呢

理论上,永远不要。

为什么呢,Thomas是这样说的

  • Adds configuration complexity

  • Requires additional processing

  • Debugging is lot harder

而你可能真正需要的是

  • Load-balancing plus sticky sessions

  • If a node fails, sessions will be lost

集群应该是最后一个选择。

我们前面的文章写过通过Redis/Memcached来存储Session实现多实例间的Session数据共享的原理及步骤。(详解集群内Session高可用的实现原理 )

其实Tomcat官方提供了内置的Cluster功能,无须第三方的插件支持。

Tomcat官方的集群(Cluster)配置说明

整个集群的配置可以分为以下几步:

  1. 配置每个Tomcat实例的Engine,增加jvmRoute

  2. 配置集群部署的应用,修改其web.xml,增加<distributable/>配置。

  3. 使用Apache进行负载均衡,同时配置Session sticky和接受请求转发的Map path 。关于Apache的配置,可以参考前面的文章

    快看Apache那个二道贩子(1)

    快看Apache那个二道贩子(2)

  • 修改各个Tomcat实例的Cluster配置,最简配置为打开默认注释的内容:

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

    这个最简易的SimpleTcpCluster会使用内存进行Session数据的存储,并且集群间各个Tomcat实例会互相进行数据备份。 各个实例间会通过multicast的方式进行心跳检测。

    以下为实例1的log

    下图为实例2的log

    session数据的数据的传输是通过Tcp Connection进行的。

    下图为断开一个实例连接时,其它实例收到的检查信息

    当然,我们也可能对Cluster进行各项属性的定义,例如Session的Manager,multicast和数据传递的实现等,担心Session放在内存中的话,可以使用其它的Manager实现。

    Tomcat提供了三种方式的Session共享策略:

    • ‍Session数据持久化,将数据保存到共享文件系统

    • Sesion持久化,数据保存到共享的数据库中,数据通过JDBCStore进行存储

    • 使用内存进行共享,使用Tribes

  1. ‍5. 继续使用examples中的session进行功能检查,此时,你会发现多个实例间数据可以正常共享,而且不需要其它第三方的插件支持,绝对官方的实现。


    以上,即为配置Tomcat官方提供的Cluster的步骤。

    相关阅读

    1.  深入Tomcat源码分析Session到底是个啥!

    2. 对于过期的session,Tomcat做了什么?

    3. 禁用Cookie后,Session怎么样使用?

    4. Tomcat的AccessLogValve介绍

    5. 详解集群内Session高可用的实现原理

    6. 快看Apache那个二道贩子

    猜你喜欢

    1. 深度揭秘乱码问题背后的原因及解决方式

    2. WEB应用是怎么被部署的?

    3. 怎样调试Tomcat源码

    4. IDE里的Tomcat是这样工作的!

    5. 重定向与转发的本质区别

    6. 怎样阅读源代码

    Tomcat那些事儿

    本公众号由曾从事应用服务器核心研发的工程师维护。文章深入Tomcat源码,分析应用服务器的实现细节,工作原理及与之相关的技术,使用技巧,工作实战等。起于Tomcat但不止于此。同时会分享并发、JVM等,内容多为原创,欢迎关注。


    扫描或长按下方二维码,即可关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值