集群成员对象

目录

简介

Apache Tribes Channel 中的成员组件负责动态发现集群中的其他成员(节点)。目前有两种不同的成员服务:org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipServiceMcastService 构建基于多播的成员服务,该服务将 UDP 数据包发送到多播 IP 地址。StaticMembershipService 构建基于单播的成员服务,该服务将 TCP 数据包发送到预定义的成员地址。

默认实现

集群组通知的默认实现是基于使用 UDP 数据包发送到多播 IP 地址的多播心跳构建的。集群成员通过使用相同的多播地址/端口组合进行分组。每个成员以给定间隔(frequency)发送心跳,此心跳用于动态发现。以类似的方式,如果在 dropTime 毫秒指定的时间范围内未收到心跳,则该成员被视为可疑,并且通道和任何成员监听器都将收到通知。

属性

通用属性

属性描述
className

成员组件的实现。有两种可用实现:org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipService

多播属性

属性描述
className

值为 org.apache.catalina.tribes.membership.McastService。此实现使用多播心跳进行成员发现。

address

成员将广播其存在并监听其他心跳的多播地址。默认值为 228.0.0.4。请确保您的网络已启用多播流量。
多播地址与 port 结合使用,创建集群组。要将您的集群划分为多个不同的组,或将 QA 与生产环境分离,请更改 portaddress
以前称为 mcastAddr。

port

多播端口,默认值为 45564
多播端口与 address 结合使用,创建集群组。要将您的集群划分为多个不同的组,或将 QA 与生产环境分离,请更改 portaddress

frequency

发送心跳的频率,单位为毫秒。默认值为 500 毫秒。
在大多数情况下,默认值就足够了。更改此值只是改变心跳之间的间隔。

dropTime

如果在给定时间内成员未能发送心跳,成员组件将使成员超时并通知 Channel。默认值为 3000 毫秒。这意味着,如果在此时间范围内未从成员收到心跳,成员组件将通知集群此情况。
在高延迟网络中,您可能希望增加此值,以防止误报。
Apache Tribes 还提供了一个 TcpFailureDetector,它会在心跳超时发生时使用 TCP 连接验证超时。这有助于防止误报。

bind

如果您希望将多播流量绑定到特定的网络接口,请使用此属性。默认情况下,或未设置此属性时,它会尝试绑定到 0.0.0.0,有时在多宿主主机上这会成为问题。

ttl

多播心跳的生存时间(TTL)设置。此设置的值应介于 0 到 255 之间。默认值取决于 VM 实现。

domain

Apache Tribes 能够使用此域属性将成员逻辑地分组到域中。org.apache.catalina.tribes.Member.getDomain() 方法返回此处指定的值。

soTimeout

心跳的发送和接收是在单个线程上完成的,因此为了避免此线程永远阻塞,您可以控制此套接字上的 SO_TIMEOUT 值。
如果提供的值小于或等于 0,代码将把此值默认设置为 frequency。

recoveryEnabled

在网络故障的情况下,Java 多播套接字不会透明地进行故障转移,而是会在每次接收请求时持续抛出 IOException。当 recoveryEnabled 设置为 true 时,这将关闭多播套接字并打开一个具有与上述定义相同属性的新套接字。
默认值为 true

recoveryCounter

recoveryEnabled==true 时,此值表示在尝试恢复之前必须发生错误的次数。默认值为 10

recoverySleepTime

recoveryEnabled==true 时,此值表示系统在恢复尝试之间(直到成功恢复)将休眠多长时间(以毫秒为单位)。默认值为 5000(5 秒)。

localLoopbackDisabled

成员使用多播,它将调用 java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled)。当 localLoopbackDisabled==true 时,多播消息将不会到达同一本地机器上的其他节点。默认值为 false

静态成员属性

使用静态成员服务时,必须确保 Cluster 元素的 channelStartOptions 属性设置为默认值 15

属性描述
className

值为 org.apache.catalina.tribes.membership.StaticMembershipService

connectTimeout

尝试与预定义的静态成员地址建立 TCP 连接的超时时间。默认值为 500 毫秒。

expirationTime

如果成员未能在给定时间内更新其活跃时间,此成员服务将向集群通知 memberDisappeared 事件。默认值为 5000 毫秒。

rpcTimeout

用于与其他节点之间进行成员通知的消息的超时时间。默认值为 3000 毫秒。

useThread

如果设置为 `true`,此成员服务将启动一个本地线程用于发送 ping 消息。如果设置为 `false`,通道心跳将发送 ping 消息。默认值为 `false`。

pingInterval

如果 useThread == true,定义发送 ping 消息的间隔。默认值为 1000 毫秒。

嵌套组件

静态成员服务允许嵌套 **<LocalMember>** 和 **<Member>** 元素。

StaticMember 属性

LocalMember
作为静态集群组的本地成员的静态成员。

**注意:** 没有必要使用 **<LocalMember>** 元素明确配置本地成员。所有集群成员(包括本地成员)都可以使用 **<Member>** 元素定义,Tomcat 会自行确定哪个是本地成员。

属性描述
className只有一个可用实现:org.apache.catalina.tribes.membership.StaticMember
port无需设置。此属性的值继承自集群接收器设置。
securePort无需设置。此属性的值继承自集群接收器设置。
host无需设置。此属性的值继承自集群接收器设置。
domain此静态成员监听集群消息的逻辑集群域。有两种不同类型的值可能:
1. 常规字符串值,例如“staging-domain”或“tomcat-cluster”,将使用 ISO-8859-1 编码转换为字节。 2. 字符串形式的字节数组,例如 {216,123,12,3}
uniqueId此静态成员的全局唯一 ID。值必须是 16 字节,形式如下:
1. 字符串形式的字节数组,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

Member
添加到静态集群组的静态成员。

属性描述
className只有一个可用实现:org.apache.catalina.tribes.membership.StaticMember
port此静态成员监听集群消息的端口。
securePort此静态成员监听加密集群消息的安全端口,默认值为 -1,此值表示该成员未监听安全端口。
host此静态成员监听集群消息的主机(或网络接口)。有三种不同类型的值可能:
1. IP 地址形式,例如“216.123.1.23”
2. 主机名,例如“tomcat01.mydomain.com”或“tomcat01”,只要它们能正确解析。
3. 字符串形式的字节数组,例如 {216,123,12,3}
domain此静态成员监听集群消息的逻辑集群域。有两种不同类型的值可能:
1. 常规字符串值,例如“staging-domain”或“tomcat-cluster”,将使用 ISO-8859-1 编码转换为字节。
2. 字符串形式的字节数组,例如 {216,123,12,3}
uniqueId此静态成员的全局唯一 ID。值必须是 16 字节,形式如下:
1. 字符串形式的字节数组,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

设置

     <Membership className="org.apache.catalina.tribes.membership.StaticMembershipService">
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat01.mydomain.com"
                  uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat02.mydomain.com"
                  uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
     </Membership>