Cluster 对象

目录

简介

tomcat 集群实现提供会话复制、上下文属性复制和集群范围的 WAR 文件部署。虽然 Cluster 配置相当复杂,但默认配置对大多数人来说开箱即用。

Tomcat 集群实现具有很强的可扩展性,因此我们公开了许多选项,使配置看起来很多,但不要失去信心,相反,你可以很好地控制正在发生的事情。

安全性

集群实现基于以下基础编写:所有与集群相关的网络流量都使用安全、受信任的网络。在不安全、不受信任的网络上运行集群是不安全的。

有很多选项可以为 Tomcat 集群提供安全、受信任的网络。其中包括

  • 专用 LAN
  • 虚拟专用网络 (VPN)
  • IPSEC

EncryptInterceptor 提供机密性和完整性保护,但它不能防止与在不受信任的网络上运行 Tomcat 集群相关的所有风险,尤其是 DoS 攻击。

引擎与主机放置

你可以在 <Engine> 容器或 <Host> 容器中放置 <Cluster> 元素。
将它放在引擎中意味着你将支持 Tomcat 中所有虚拟主机的集群,并共享消息传递组件。当你将 <Cluster> 放置在 <Engine> 元素中时,集群会将每个会话管理器的主机名追加到管理器的名称,以便可以区分具有相同名称但位于两个不同主机中的两个上下文。

上下文属性复制

要配置上下文属性复制,只需通过交换用于应用程序上下文的上下文实现来执行此操作。

<Context className="org.apache.catalina.ha.context.ReplicatedContext"/>

此上下文扩展了 Tomcat StandardContext,因此来自 基本实现 的所有选项都是有效的。

嵌套组件

管理器:
会话管理器元素标识此集群实现中使用的会话管理器类型。此管理器配置与在常规 <Context> 配置中使用的配置相同。
默认值是 org.apache.catalina.ha.session.DeltaManager,它与 SimpleTcpCluster 实现紧密耦合。其他管理器(如 org.apache.catalina.ha.session.BackupManager)是/可能是松散耦合的,并且不依赖于 SimpleTcpCluster 进行数据复制。

通道:
通道及其子组件都是集群组的 IO 层的一部分,并且是我们在其中自己命名的“Tribes”模块
网络层、消息传递和成员资格逻辑的任何配置和调整都将在通道及其嵌套组件中完成。您始终可以找到有关 Apache Tribes 的更多信息

:
Tomcat 集群实现使用 Tomcat 来跟踪请求何时进入和退出 servlet 容器。它使用这些阀来能够对何时复制数据做出明智的决策,而复制数据始终在请求结束时进行。

部署器:
部署程序组件是 Tomcat Farm 部署程序。它允许您在整个集群范围内部署和取消部署应用程序。

集群侦听器:
集群侦听器用于跟踪使用 SimpleTcpCluster 发送和接收的消息。如果您希望跟踪消息,则可以在这里添加侦听器,或者可以向通道对象添加阀。

属性

SimpleTcpCluster 属性

属性 说明
className

主集群类,当前仅提供一个,org.apache.catalina.ha.tcp.SimpleTcpCluster

channelSendOptions

Tribes 通道发送选项,默认值为 8
此选项用于设置通过 SimpleTcpCluster 发送的所有消息使用的标志。该标志决定如何发送消息,并且是一个简单的逻辑 OR。

int options = Channel.SEND_OPTIONS_ASYNCHRONOUS |
              Channel.SEND_OPTIONS_SYNCHRONIZED_ACK |
              Channel.SEND_OPTIONS_USE_ACK;

一些值是
Channel.SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004
Channel.SEND_OPTIONS_ASYNCHRONOUS = 0x0008
Channel.SEND_OPTIONS_USE_ACK = 0x0002
因此,要使用 ACK 和 ASYNC 消息传递,标志将为 10 (8+2)
请注意,如果您使用 ASYNC 消息传递,则接收节点可能会以不同于发送顺序的顺序处理会话的更新消息。

各种 channelSendOptions 值在发送节点上的吞吐量与发送或接收节点发生故障时复制的可靠性之间进行权衡。以下是部分常见选项。这里,“消息”可以是节点之间发送的任何消息,但这里仅考虑会话更改消息。

channelSendOptions="8" / channelSendOptions="async" 对于发送方而言,只要消息被放入发送方队列中以传输到其他节点,消息就被“发送”。消息可能无法到达任何或所有接收节点,并且可能无法在到达的任何节点上成功处理。此选项在发送方上提供最高的吞吐量,但可靠性最低,因为触发请求将在不知道会话复制成功/失败的情况下完成。

channelSendOptions="2" / channelSendOptions="use_ack" 发送方会阻塞当前请求的完成,直到所有接收节点确认已收到消息,但不一定已处理该消息。此选项会导致发送节点的吞吐量降低,因为必须传输消息并收到确认,但可靠性高于异步模型。

channelSendOptions="6" / channelSendOptions="sync,use_ack" 发送方会阻塞当前请求的完成,直到所有接收节点确认已收到处理了消息。此选项的吞吐量最低(这三个选项中),但可靠性最高。

您还可以将这些选项设置为逗号分隔的字符串,例如“async, multicast”,它将被转换为 Channel.SEND_OPTIONS_ASYNCHRONOUS | Channel.SEND_OPTIONS_MULTICAST
有效的选项名称为“asynchronous”(别名“async”)、“byte_message”(别名“byte”)、“multicast”、“secure”、“synchronized_ack”(别名“sync”)、“udp”、“use_ack”

channelStartOptions

设置群集使用的 <Channel> 对象的启动和停止标志。默认值为 Channel.DEFAULT,它启动所有通道服务,例如发送方、接收方、成员发送方和成员接收方。目前提供以下标志

Channel.DEFAULT = Channel.SND_RX_SEQ (1) |
                  Channel.SND_TX_SEQ (2) |
                  Channel.MBR_RX_SEQ (4) |
                  Channel.MBR_TX_SEQ (8);

使用静态成员服务 org.apache.catalina.tribes.membership.StaticMembershipService 时,您必须确保将此属性配置为使用默认值。

heartbeatBackgroundEnabled

标志是否在容器后台线程调用通道心跳。默认值为 false。启用此标志,别忘了禁用通道心跳线程。

notifyLifecycleListenerOnFailure

标志如果所有群集侦听器无法接受通道消息,是否通知 LifecycleListeners。默认值为 false。