A.33. JGroups 协议
| 协议 | 协议类型 | 描述 |
|---|---|---|
| ASYM_ENCRYPT | Encryption | 使用存储在集群的协调者中的 secret 密钥来加密群集成员之间的消息。 |
| AUTH | 身份验证 | 为群集成员提供一层身份验证。 |
| azure.AZURE_PING | Discovery(发现) | 支持使用 Microsoft Azure 的 blob 存储进行节点发现。 |
| FD_ALL | 故障检测 | 基于简单的心跳协议提供故障检测。 |
| FD_SOCK | 故障检测 | 根据群集成员之间创建的 TCP 套接字环提供故障检测。 |
| JDBC_PING | Discovery(发现) | 使用共享数据库来发现群集成员,其中成员写入其地址。 |
| MERGE3 | 合并 | 在集群分割时,将子集群合并在一起。 |
| MFC | 流控制 | 在发送者和所有群集成员之间提供多播流控制。 |
| MPING | Discovery(发现) | 发现具有 IP 多播的群集成员。 |
| pbcast.GMS | Group Membership |
处理组成员资格,包括加入集群的新成员,现有成员保留请求,为崩溃成员保留 |
| pbcast.NAKACK2 | 消息传输 | 确保消息可靠性和顺序,确保按发送者发送的顺序接收由其中一个发送方发送的所有消息。 |
| pbcast.STABLE | 消息稳定性 | 删除所有成员可见的消息。 |
| PING | Discovery(发现) | 成员的初始发现,支持动态发现群集成员。 |
| SASL | 身份验证 | 使用 SASL 机制为群集成员提供一层身份验证。 |
| SYM_ENCRYPT | Encryption | 使用共享密钥存储来加密群集成员之间的消息。 |
| S3_PING | Discovery(发现) | 使用 Amazon S3 发现初始成员。 |
| TCPGOSSIP | Discovery(发现) | 使用外部 gossip 路由器发现群集成员。 |
| TCPPING | Discovery(发现) | 包含组成集群的群集成员地址的静态列表。 |
| UFC | 流控制 | 在发送者和所有群集成员之间提供单播流控制 |
| UNICAST3 | 消息传输 | 确保单播消息的消息可靠性和顺序,确保按发送者的顺序接收由一发送者发送的所有消息。 |
| VERIFY_SUSPECT | 故障检测 | 验证怀疑成员是否已被 ping 最后一个时间在驱除它之前被 ping 结束。 |
通用协议属性
所有协议都可以访问以下属性:
| 属性 | default | 描述 |
|---|---|---|
| module | org.jgroups | 用于解析协议类型的模块。 |
| 属性 | 此协议的属性。 | |
| 启用统计 | false | 是否启用统计数据。 |
身份验证协议
身份验证协议用于执行身份验证,主要负责确保只有经过身份验证的用户可以加入集群。这些协议位于 GMS 协议下方,以便他们可以侦听加入群集的请求。
AUTH 属性
虽然 AUTH 协议不包含额外的属性,但它必须有一个令牌定义为子元素。
在定义此协议时,会使用 auth-protocol 元素,而不是 protocol 元素。
令牌类型
当使用 Elytron 提高安全性时,建议使用以下身份验证令牌之一。这些身份验证令牌有意设计用于 Elytron,可能不会用于旧的安全配置。
| 令牌 | 描述 |
|---|---|
| cipher-token | 转换共享 secret 的身份验证令牌。RSA 是用于转换的默认算法。 |
| digest-token | 转换共享 secret 的身份验证令牌。SHA-256 是用于转换的默认算法。 |
| plain-token | 没有额外转换为共享 secret 的身份验证令牌。 |
以下身份验证令牌从 JGroups 继承,并有权在需要身份验证的任何配置中使用。
| 令牌 | 描述 |
|---|---|
| MD5Token | 使用 MD5 或 SHA 哈希加密共享 secret 的身份验证令牌。MD5 是用于加密的默认算法。 |
| SimpleToken | 没有额外转换为共享 secret 的身份验证令牌。此令牌不区分大小写,在决定字符串是否匹配时不考虑。 |
| X509Token | 使用 X509 证书加密共享 secret 的身份验证令牌。 |
SASL 属性
| 属性 | default | 描述 |
|---|---|---|
| client_callback_handler |
节点充当客户端时使用的 | |
| client_name | 节点充当客户端时使用的名称。如果使用 JAAS 登录模块,此名称也会用于获取主题。 | |
| client_password | 节点充当客户端时使用的密码。如果使用 JAAS 登录模块,也使用此密码来获取主题。 | |
| login_module_name |
用作创建 SASL 客户端和服务器的主题的 JAAS 登录模块名称。此属性仅需要某些 | |
| mech |
SASL 身份验证机制的名称。此名称可以是本地 SASL 提供程序支持的任何机制,并且 JDK 提供 | |
| sasl_props |
定义的属性 | |
| server_callback_handler |
节点充当服务器时使用的 | |
| server_name | 完全限定服务器名称。 | |
| timeout | 5000 | 等待响应挑战的毫秒数。 |
发现协议
以下协议用于查找集群的初始成员资格,然后可用于确定当前的协调器。发现协议列表如下。
- AZURE_PING
- JDBC_PING
- MPING
- PING
- S3_PING
- TCPGOSSIP
- TCPPING
AZURE_PING 属性
| 属性 | default | 描述 |
|---|---|---|
| container | 用于 PING 数据的 blob 容器的名称。这必须是有效的 DNS 名称。 | |
| storage_access_key | 存储帐户的 secret 访问密钥。 | |
| storage_account_name | 包含 blob 容器的 Microsoft Azure 存储帐户的名称。 |
JDBC_PING 属性
| 属性 | default | 描述 |
|---|---|---|
| data-source | 数据源引用,改为使用 connection 和 JNDI 查找属性。 |
在定义 JDBC_PING 协议时,使用 jdbc-protocol 元素而不是 protocol 元素。
S3_PING 属性
| 属性 | default | 描述 |
|---|---|---|
| access_key | 用于访问 S3 存储桶的 Amazon S3 访问密钥。 | |
| 主机 | s3.amazonaws.com | S3 Web 服务的目的地。 |
| 位置 | 要使用的 Amazon S3 存储桶的名称。bucket 必须存在并使用唯一名称。 | |
| pre_signed_delete_url | 用于 DELETE 操作的预签名 URL。 | |
| port |
| Web 服务侦听的端口。 |
| pre_signed_put_url | 用于 PUT 操作的预签名 URL。 | |
| prefix |
如果设置了,并且设置了 | |
| secret_access_key | 用于访问 S3 存储桶的 Amazon S3 secret 访问密钥。 | |
| use_ssl | true | 决定在联系主机和端口组合时使用 SSL。 |
TCPGOSSIP 属性
| 属性 | default | 描述 |
|---|---|---|
| socket-binding |
此协议层的套接字绑定规格。deprecated: 使用 | |
| socket-bindings | 此协议的出站套接字绑定。 |
在定义 TCPGOSSIP 协议时,会使用 socket-discovery-protocol 元素而不是 protocol 元素。
TCPPING 属性
| 属性 | default | 描述 |
|---|---|---|
| socket-binding |
此协议层的套接字绑定规格。deprecated: 使用 | |
| socket-bindings | 此协议的出站套接字绑定。 |
在定义 TCPPING 协议时,会使用 socket-discovery-protocol 元素,而不是 protocol 元素。
加密协议
以下协议用于保护通信堆栈:加密基于集群的所有成员的共享 secret 密钥。使用 SYM_ENCRYPT 或公钥交换(使用 A )时,此密钥可以从共享密钥存储获取。在定义以下协议时,生成的 XML 中会创建一个 SYM_ENCRYPT encrypt-protocol 元素。
如果使用 ASYM_ENCRYPT,则同一堆栈必须定义有 AUTH 协议。使用 SYM_ENCRYPT 时 AUTH 协议是可选的。
ASYM_ENCRYPT 属性
| 属性 | default | 描述 |
|---|---|---|
| key-alias | 指定密钥存储中的加密密钥别名。 | |
| key-credential-reference | 从密钥存储获取加密密钥所需的凭据。 | |
| key-store | 对包含加密密钥的密钥存储的引用。 |
SYM_ENCRYPT 属性
| 属性 | default | 描述 |
|---|---|---|
| key-alias | 指定密钥存储中的加密密钥别名。 | |
| key-credential-reference | 从密钥存储获取加密密钥所需的凭据。 | |
| key-store | 对包含加密密钥的密钥存储的引用。 |
失败检测协议
以下协议用于探测集群的成员,以确定它们是否仍处于活动状态。这些协议没有超出通用属性的任何其他属性。
- FD_ALL
- FD_SOCK
- VERIFY_SUSPECT
流控制协议
以下协议负责流控制,或将消息发件人率调整为最慢的接收器的过程。如果发送者以比接收方快的速度发送消息,则接收方将按队列或丢弃消息,从而导致重新传输。这些协议没有超出通用属性的任何其他属性。
- MFC - 多播流控制
- UFC - 单播流控制
组成员协议
直播.GMS 协议负责加入群集的新成员、离开集群的现有成员,以及怀疑崩溃的成员。此协议没有超出通用属性的任何其他属性。
合并协议
如果集群被分割,MERGE3 协议负责将子集群合并在一起。虽然此协议负责将群集成员合并回一起,但这不会合并集群的状态。应用负责处理回调以合并状态。此协议没有超出通用属性的任何其他属性。
消息稳定性
pbcast.STABLE 协议负责垃圾回收集群所有成员可见的消息。此协议启动包含给定成员的消息号的稳定消息,称为摘要。当集群的所有成员收到其他摘要后,可能会从重新传输表中删除消息。此协议没有超出通用属性的任何其他属性。
可靠的消息传输
以下协议为发送到集群中的所有节点的消息提供可靠的消息交付和 FIFO 属性。可靠的发送意味着发送者不会丢失任何消息,因为所有消息都会被编号,并在未收到序列号时发送重新传输请求。这些协议没有超出通用属性的任何其他属性。
- pbcast.NAKACK2
- pbcast.UNICAST3
弃用的协议
以下协议已弃用,已被仅包含类名称的协议替代。例如,协议名称将是 ASYM_ENCRYPT,而不是指定 org.jgroups.protocols.ASYM_ENCRYPT。
- org.jgroups.protocols.ASYM_ENCRYPT
- org.jgroups.protocols.AUTH
- org.jgroups.protocols.JDBC_PING
- org.jgroups.protocols.SYM_ENCRYPT
- org.jgroups.protocols.TCPGOSSIP
- org.jgroups.protocols.TCPPING