群集成员资格对象

目录

简介

Apache Tribes 通道 中的成员资格组件负责动态发现群集中的其他成员(节点)。目前有两种不同的成员资格服务,即 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。此实现使用多播心跳进行成员发现。

地址

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

端口

多播端口,默认值为 45564
多播端口与 address 结合使用可创建集群组。要将您的服务器场分成几个不同的组,或将 QA 从生产中分离出来,请更改 portaddress

频率

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

dropTime

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

绑定

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

ttl

多播心跳的时间生存期。此设置应为 0 到 255 之间的某个值。默认值取决于 VM 实现。

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

soTimeout

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

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>元素。

静态成员属性

LocalMember
静态成员,它是静态集群组的本地成员。

注意:无需使用<LocalMember>元素显式配置本地成员。所有集群成员(包括本地成员)都可以使用<Member>元素定义,Tomcat 会确定哪个是本地成员。

属性 说明
className 仅一个可用的实现:org.apache.catalina.tribes.membership.StaticMember
端口 无需设置。此属性的值继承自群集接收器设置。
securePort 无需设置。此属性的值继承自群集接收器设置。
host 无需设置。此属性的值继承自群集接收器设置。
此静态成员侦听群集消息的逻辑群集域。可能使用两种不同类型的值
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}

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

属性 说明
className 仅一个可用的实现:org.apache.catalina.tribes.membership.StaticMember
端口 此静态成员侦听群集消息的端口
securePort 此静态成员侦听加密群集消息的安全端口,默认值为-1,此值表示成员未在安全端口上侦听
host 此静态成员侦听群集消息的主机(或网络接口)。可能使用三种不同类型的值
1. “216.123.1.23”形式的 IP 地址
2. 只要能正确解析,即可使用主机名,如“tomcat01.mydomain.com”或“tomcat01”
3. 字符串形式的字节数组,例如 {216,123,12,3}
此静态成员侦听群集消息的逻辑群集域。可能使用两种不同类型的值
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>