4.2. 集群发现协议
Data Grid 支持不同的协议,允许节点在网络和组成集群中自动查找。
Data Grid 可使用两种发现机制:
- 在大多数网络上工作且不依赖于外部服务的通用发现协议。
-
发现协议,它依赖于外部服务来为 Data Grid 集群存储和检索拓扑信息。
例如,DNS_PING 协议通过 DNS 服务器记录执行发现。
在托管平台上运行 Data Grid 需要使用发现机制,它们适应各个云供应商实施的网络限制。
4.2.1. PING 复制链接链接已复制到粘贴板!
PING 或 UDPPING 是一种通用的 JGroups 发现机制,它使用 UDP 协议的动态多播。
加入时,节点会向 IP 多播地址发送 PING 请求,以发现 Data Grid 集群中已存在的其他节点。每个节点都使用包含协调器节点的地址的数据包响应 PING 请求。c=coordinator 的地址和 A=own 地址。如果没有节点响应 PING 请求,则加入的节点将变为新集群中的协调器节点。
PING 配置示例
<PING num_discovery_runs="3"/>
<PING num_discovery_runs="3"/>
4.2.2. TCPPING 复制链接链接已复制到粘贴板!
TCPPING 是一种通用 JGroups 发现机制,可为集群成员使用静态地址列表。
使用 TCPPING 时,您可以手动指定 Data Grid 集群中每个节点的 IP 地址或主机名,作为 JGroups 堆栈的一部分,而不是让节点互相发现。
TCPPING 配置示例
<TCP bind_port="7800" />
<TCPPING timeout="3000"
initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}"
port_range="0"
num_initial_members="3"/>
<TCP bind_port="7800" />
<TCPPING timeout="3000"
initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}"
port_range="0"
num_initial_members="3"/>
4.2.3. MPING 复制链接链接已复制到粘贴板!
MPING 使用 IP 多播来发现 Data Grid 集群的初始成员资格。
您可以使用 MPING 将 TCPPING 发现替换为 TCP 堆栈,并使用多casing 进行发现,而不是初始主机的静态列表。但是,您还可以将 MPING 与 UDP 堆栈搭配使用。
MPING 配置示例
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.mcast_port:46655}"
num_discovery_runs="3"
ip_ttl="${jgroups.udp.ip_ttl:2}"/>
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.mcast_port:46655}"
num_discovery_runs="3"
ip_ttl="${jgroups.udp.ip_ttl:2}"/>
4.2.4. TCPGOSSIP 复制链接链接已复制到粘贴板!
gossip 路由器在网络上提供一个集中的位置,您的 Data Grid 集群可以从中检索其他节点的地址。
您可以将 Gossip 路由器的地址(IP:PORT)注入 Data Grid 节点,如下所示:
-
将地址作为系统属性传递给 JVM,例如
-DGossipRouterAddress="10.10.2.4[12001]"。 - 在 JGroups 配置文件中引用该系统属性。
gossip 路由器配置示例
<TCP bind_port="7800" />
<TCPGOSSIP timeout="3000"
initial_hosts="${GossipRouterAddress}"
num_initial_members="3" />
<TCP bind_port="7800" />
<TCPGOSSIP timeout="3000"
initial_hosts="${GossipRouterAddress}"
num_initial_members="3" />
4.2.5. JDBC_PING 复制链接链接已复制到粘贴板!
JDBC_PING 使用共享数据库来存储有关 Data Grid 集群的信息。此协议支持任何可以使用 JDBC 连接的数据库。
将 IP 地址写入共享数据库的节点,以便加入节点可以在网络中找到 Data Grid 集群。当节点离开 Data Grid 集群时,它们会从共享数据库中删除其 IP 地址。
JDBC_PING 配置示例
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name"
connection_username="user"
connection_password="password"
connection_driver="com.mysql.jdbc.Driver"/>
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name"
connection_username="user"
connection_password="password"
connection_driver="com.mysql.jdbc.Driver"/>
在 classpath 中添加适当的 JDBC 驱动程序,以便 Data Grid 可以使用 JDBC_PING。
4.2.6. DNS_PING 复制链接链接已复制到粘贴板!
JGroups DNS_PING 查询 DNS 服务器,以在 Kubernetes 环境中发现 Data Grid 集群成员,如 OKD 和 Red Hat OpenShift。
DNS_PING 配置示例
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
4.2.7. 云发现协议 复制链接链接已复制到粘贴板!
Data Grid 包括默认的 JGroups 堆栈,它使用特定于云供应商的发现协议实现。
| 发现协议 | 默认堆栈文件 | 工件 | 版本 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
为云发现协议提供依赖项
要使用 NATIVE_S3_PING、GOOGLE_PING2 或 AZURE_PING 云发现协议,您需要向 Data Grid 提供依赖的库。
流程
-
将工件依赖项添加到项目
pom.xml中。
然后,您可以将云发现协议配置为 JGroups 堆栈文件或系统属性的一部分。