ClusterManager 对象

目录

简介

集群管理器是 Tomcat 会话管理器接口 org.apache.catalina.Manager 的扩展。集群管理器必须实现 org.apache.catalina.ha.ClusterManager,并全权负责会话的复制方式。
目前有两种不同的管理器,org.apache.catalina.ha.session.DeltaManager 将会话数据的增量复制到集群中的所有成员。这个实现经过验证,运行良好,但有一个限制,即它要求集群成员是同构的,所有节点都必须部署相同的应用程序并且是完全相同的副本。org.apache.catalina.ha.session.BackupManager 也复制增量,但只复制到一个备份节点。备份节点的位置在集群中的所有节点都是已知的。它还支持异构部署,因此管理器知道 Web 应用程序部署在哪些位置。

<Manager>

定义在 <Cluster> 元素内部的 <Manager> 元素是为所有在其 web.xml 文件中标记为 <distributable/> 的 Web 应用程序定义的模板。但是,您仍然可以通过将 <Manager> 放入 <Context> 元素中,无论是在 context.xml 文件还是 server.xml 文件中,来为每个 Web 应用程序覆盖管理器实现。

属性

通用属性

属性描述
className
name 此集群管理器的名称,该名称用于标识节点上的会话管理器。名称可能会被 Cluster 元素修改,以使其在容器中独一无二。
notifyListenersOnReplication如果您希望在会话属性在集群中的 Tomcat 节点之间复制或移除时通知会话监听器,请设置为 true
processExpiresFrequency

会话过期和相关管理器操作的频率。管理器操作将每调用指定数量的 backgroundProcess 执行一次(即,数量越低,检查发生得越频繁)。最小值为 1,默认值为 6。

secureRandomClass

用于生成会话 ID 的 Java 类名称,该类必须扩展 java.security.SecureRandom。如果未指定,默认值为 java.security.SecureRandom

secureRandomProvider

用于创建生成会话 ID 的 java.security.SecureRandom 实例的提供者名称。如果指定了无效的算法和/或提供者,管理器将使用平台默认提供者和默认算法。如果未指定,将使用平台默认提供者。

secureRandomAlgorithm

用于创建生成会话 ID 的 java.security.SecureRandom 实例的算法名称。如果指定了无效的算法和/或提供者,管理器将使用平台默认提供者和默认算法。如果未指定,将使用 SHA1PRNG 的默认算法。如果不支持默认算法,将使用平台默认算法。要指定使用平台默认算法,请不要设置 secureRandomProvider 属性并将此属性设置为空字符串。

recordAllActions

标志是否在 Tomcat 集群节点间发送所有会话操作。如果设置为 false,如果对同一属性已执行过某些操作,请确保不要在 Tomcat 集群节点间发送多个操作。在这种情况下,只发送最后添加的操作。默认值为 false

org.apache.catalina.ha.session.DeltaManager 属性

属性描述
expireSessionsOnShutdown当 Web 应用程序关闭时,Tomcat 会对每个会话发出过期调用以通知所有监听器。如果您希望在某个节点关闭时所有节点上的所有会话都过期,请将此值设置为 true。默认值为 false
maxActiveSessions此管理器将创建的最大活动会话数,或 -1(默认值)表示无限制。对于此管理器,所有会话都被视为活动会话,无论当前节点是否是会话的主节点。
notifySessionListenersOnReplication如果您希望在集群中的 Tomcat 节点之间创建和过期会话时通知会话监听器,请设置为 true
notifyContainerListenersOnReplication如果您希望在集群中的 Tomcat 节点之间通知容器监听器,请设置为 true
stateTransferTimeout节点启动时,等待从另一个节点完成会话状态传输的超时时间(以秒为单位)。默认值为 60 秒。
sendAllSessions标志是否将所有会话作为分割块发送。如果设置为 true,则将所有会话作为一个大块发送。如果设置为 false,则将会话作为分割块发送。默认值为 true
sendAllSessionsSize会话块消息中的会话数量。此值仅在 sendAllSessionsfalse 时有效。默认值为 1000
sendAllSessionsWaitTime发送会话块消息之间的等待时间。此值仅在 sendAllSessionsfalse 时有效。默认值为 2000 毫秒。
sessionAttributeNameFilter

一个正则表达式,用于过滤将要复制的会话属性。只有当属性名称与此模式匹配时,才会复制该属性。如果模式长度为零或 null,则所有属性都符合复制条件。该模式是锚定的,因此会话属性名称必须完全匹配该模式。例如,值 (userName|sessionHistory) 将仅复制名为 userNamesessionHistory 的两个会话属性。如果未指定,将使用默认值 null

sessionAttributeValueClassNameFilter

一个正则表达式,用于过滤将要复制的会话属性。只有当属性值的实现类名称与此模式匹配时,才会复制该属性。如果模式长度为零或 null,则所有属性都符合复制条件。该模式是锚定的,因此完全限定的类名必须完全匹配该模式。如果未指定,将使用默认值 null

stateTimestampDrop当此节点向另一个节点发送 GET_ALL_SESSIONS 消息时,作为响应接收到的所有会话消息都会排队。如果此属性设置为 true,则接收到的会话消息(除了其他节点发送的任何 GET_ALL_SESSIONS)将根据其时间戳进行过滤。如果消息不是 GET_ALL_SESSIONS 消息且其时间戳早于我们 GET_ALL_SESSIONS 消息的时间戳,则该消息将被丢弃。如果设置为 false,则处理所有排队的会话消息。默认值为 true
warnOnSessionAttributeFilterFailure

如果 sessionAttributeNameFiltersessionAttributeValueClassNameFilter 阻止了某个属性,是否应以 WARN 级别记录?如果 WARN 级别日志记录被禁用,则将以 DEBUG 级别记录。此属性的默认值为 false

org.apache.catalina.ha.session.BackupManager 属性

属性描述
mapSendOptions备份管理器使用复制映射,此映射负责发送和接收消息。您可以设置此映射发送消息的方式的标志,默认值为 6(同步)。
请注意,如果您使用异步消息传递,则会话的更新消息在接收节点上处理的顺序可能与它们发送的顺序不同。
maxActiveSessions此管理器将创建的最大活动会话数,或 -1(默认值)表示无限制。对于此管理器,只有当前节点是会话主节点的会话才被视为活动会话。
rpcTimeout用于广播和从另一个映射传输状态的 RPC 消息的超时时间。默认值为 15000 毫秒。
sessionAttributeNameFilter

一个正则表达式,用于过滤将要复制的会话属性。只有当属性名称与此模式匹配时,才会复制该属性。如果模式长度为零或 null,则所有属性都符合复制条件。该模式是锚定的,因此会话属性名称必须完全匹配该模式。例如,值 (userName|sessionHistory) 将仅复制名为 userNamesessionHistory 的两个会话属性。如果未指定,将使用默认值 null

sessionAttributeValueClassNameFilter

一个正则表达式,用于过滤将要复制的会话属性。只有当属性值的实现类名称与此模式匹配时,才会复制该属性。如果模式长度为零或 null,则所有属性都符合复制条件。该模式是锚定的,因此完全限定的类名必须完全匹配该模式。如果未指定,将使用默认值 null

terminateOnStartFailure如果您希望在复制映射启动失败时终止复制映射,请设置为 true。如果复制映射终止,则关联的上下文将无法启动。如果您将此属性设置为 false,复制映射不会结束。它将尝试在心跳中加入映射成员。默认值为 false
warnOnSessionAttributeFilterFailure

如果 sessionAttributeNameFiltersessionAttributeValueClassNameFilter 阻止了某个属性,是否应以 WARN 级别记录?如果 WARN 级别日志记录被禁用,则将以 DEBUG 级别记录。此属性的默认值为 false

accessTimeoutping 消息的超时时间。如果远程映射在此超时期间内未响应,则被视为已消失。默认值为 5000 毫秒。

嵌套组件

所有管理器实现

所有管理器实现都允许嵌套一个 <SessionIdGenerator> 元素。它定义了会话 ID 生成的行为。SessionIdGenerator 的所有实现都允许以下属性

属性描述
sessionIdLength

会话 ID 的长度可以通过 sessionIdLength 属性进行更改。