日期:2014-05-16  浏览次数:20607 次

如何实现 集群化/Session 复制-doc(cluster-howto.html)

源文档链接: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 

翻译日期: 2014年3月19日

翻译人员: 铁锚

感受: Tomcat 的这个集群有很多问题, 所以如果需要做分布式集群,最好使用无状态的应用程序,外加缓存系统。假如改造旧系统,那么也许可以参考一下。

翻译如下:

Apache Tomcat 6.0

如何实现 集群化/Session 复制

重要提示

也可以查阅 cluster配置参考文档.

内容列表
  • 快速设置
  • Cluster 基础
  • 概述
  • 集群信息
  • 崩溃后绑定会话到故障转移节点
  • 配置示例
  • 集群架构
  • 运行机制
  • FAQ
快速设置

只要在 <Engine> 节点 或者 <Host> 节点内部加上下面的代码即可支持集群化:

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

上面的配置将开启 all-to-all session 复制,并通过 DeltaManager 来复制 session 增量. 采用 all-to-all 方式意味着 session 会被复制到此集群中其他的所有节点. 对于很小的集群,这种方式很适用, 但我们不推荐在较大的集群中使用(有很多 tomcat 节点的情况,译者注: 例如,几十个节点及以上...). 另外,使用 delta 增量管理器时,即使 某些节点没有部署应用程序,也会复制 session 到所有节点上. 
要在较大的集群上进行session复制,您需要使用 BackupManager. 此 manager 只复制 session 数据到一个备份节点, 并且只复制到部署了对应应用程序的那些节点. BackupManager的缺点: 经过测试,性能不如 delta manager. 
下面是一些重要的默认值: 
1. 默认的 Multicast (组播)地址是: 228.0.0.4 
2. 默认的 Multicast (组播)端口是: 45564 (端口号和地址组合以后就决定了 cluster 关系,被认为是同一个集群). 
3. 默认广播的IP java.net.InetAddress.getLocalHost().getHostAddress() (确保你不是广播到 127.0.0.1, 这是一个常见的错误) 
4. 默认的监听复制消息的 TCP 端口是在 4000-4100 范围内第一个可用的server socket。 
5. 配置了两个监听器: ClusterSessionListener 和 JvmRouteSessionIDBinderListener 
6. 配置了两个拦截器: TcpFailureDetector 和 MessageDispatch15Interceptor 
下面是默认 cluster 配置信息的完整列表(效果和上