嵌入了 Data Grid
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 配置 Data Grid Maven 存储库 复制链接链接已复制到粘贴板!
Data Grid Java 发行版可从 Maven 获取。
您可以从客户门户网站下载 Data Grid Maven 存储库,或者从公共 Red Hat Enterprise Maven 存储库拉取 Data Grid 依赖项。
1.1. 下载 Data Grid Maven 存储库 复制链接链接已复制到粘贴板!
如果您不想使用公共 Red Hat Enterprise Maven 存储库,将 Data Grid Maven 存储库下载并安装到本地文件系统、Apache HTTP 服务器或 Maven 存储库管理器。
流程
- 登录到红帽客户门户。
- 导航到 Data Grid 的软件下载。
- 下载 Red Hat Data Grid 8.2 Maven 存储库。
- 将存档的 Maven 存储库提取到本地文件系统。
-
打开
README.md文件,并按照适当的安装说明进行操作。
1.2. 添加 Red Hat Maven 存储库 复制链接链接已复制到粘贴板!
在您的 Maven 构建环境中包括红帽 GA 存储库,以获取 Data Grid 工件和依赖项。
流程
将 Red Hat GA 存储库添加到 Maven 设置文件中,通常为
~/.m2/settings.xml,或者直接在项目的pom.xml文件中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. 配置数据网格 POM 复制链接链接已复制到粘贴板!
Maven 使用名为 Project Object Model (POM)文件的配置文件来定义项目并管理构建。POM 文件采用 XML 格式,描述生成的项目打包和输出的模块和组件依赖项、构建顺序和目标。
流程
-
打开您的项目
pom.xml进行编辑。 -
使用正确的 Data Grid 版本定义
version.infinispan属性。 在
dependencyManagement部分中包含infinispan-bom。Bill Of Materials (BOM)控制依赖项版本,从而避免了版本冲突,这意味着您不需要为添加到项目的每个 Data Grid 工件设置版本。
-
保存并关闭
pom.xml。
以下示例显示了 Data Grid 版本和 BOM:
后续步骤
根据需要,将 Data Grid 工件作为依赖项添加到 pom.xml 中。
第 2 章 在项目中添加 Data Grid 复制链接链接已复制到粘贴板!
将 Data Grid 添加到项目,以便在您的应用程序中创建嵌入的缓存。
流程
-
将
infinispan-core工件作为依赖项添加到pom.xml中,如下所示:
第 3 章 初始化嵌入缓存 复制链接链接已复制到粘贴板!
空间化缓存管理器并在项目中添加嵌入式缓存,以开始在您的应用程序中运行 Data Grid。
流程
- 初始化默认缓存管理器并添加名为 的嵌入式缓存,如下所示:
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
DefaultCacheManager cacheManager = new DefaultCacheManager(global.build());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC);
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("myCache", builder.build());
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
DefaultCacheManager cacheManager = new DefaultCacheManager(global.build());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC);
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("myCache", builder.build());
前面的代码初始化默认的集群缓存管理器。缓存管理器包含您的缓存定义和控制缓存生命周期。
Data Grid 不提供默认的缓存配置,因此在初始化默认缓存管理器后,您需要至少添加一个缓存实例。本例使用 ConfigurationBuilder 类来创建使用分布式同步缓存模式的嵌入式缓存定义。然后,您可以调用 getOrCreateCache () 方法,该方法在集群的所有节点上创建一个名为"myCache"的缓存,如果已存在,则返回它。
后续步骤
现在,您已创建了带有缓存运行的缓存管理器,您可以添加更多缓存定义,将一些数据放在缓存中,或者根据需要配置 Data Grid。
第 4 章 启用 Data Grid Statistics 复制链接链接已复制到粘贴板!
配置 Data Grid 以导出缓存管理器和缓存的统计信息。
流程
修改您的配置,以以下方法之一启用 Data Grid 统计:
-
declarative: 添加
statistics="true"属性。 -
programmatic :调用
.statistics ()方法。
声明
<!-- Enables statistics for the Cache Manager. --> <cache-container statistics="true"> <!-- Enables statistics for the named cache. --> <local-cache name="mycache" statistics="true"/> </cache-container>
<!-- Enables statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Enables statistics for the named cache. -->
<local-cache name="mycache" statistics="true"/>
</cache-container>
programmatic
第 5 章 配置数据网格以注册 JMX MBeans 复制链接链接已复制到粘贴板!
Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。您必须单独启用 JMX 的统计,否则 Data Grid 都为所有统计属性提供 0 值。
流程
修改缓存容器配置以以下方法之一启用 JMX:
-
声明:在缓存容器中添加 <
jmx enabled="true"/> 元素。 -
programmatic: 调用
.jmx ().enable ()方法。
声明
<cache-container> <jmx enabled="true" /> </cache-container>
<cache-container>
<jmx enabled="true" />
</cache-container>
programmatic
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .jmx().enable() .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
5.1. Data Grid MBeans 复制链接链接已复制到粘贴板!
Data Grid 公开了代表可管理资源的 JMX MBeans。
org.infinispan:type=Cache- 可用于缓存实例的属性和操作。
org.infinispan:type=CacheManager- 可用于缓存管理器的属性和操作,包括数据网格缓存和集群健康统计信息。
有关可用 JMX MBeans 的完整列表以及描述和可用的操作和属性,请参阅 Data Grid JMX 组件 文档。
第 6 章 设置 Data Grid 集群 复制链接链接已复制到粘贴板!
Data Grid 需要传输层,以便节点可以自动加入和离开集群。传输层还可让数据在网络间复制或分发数据,并执行操作,如重新平衡和状态传输。
6.1. 默认 JGroups Stacks 复制链接链接已复制到粘贴板!
Data Grid 在 infinispan-core-12.1.11.Final 。
-redhat-00001.jar 文件的 default-configs 目录中提供默认的 JGroups 堆栈文件 default-jgroups114.xml
| 文件名 | 堆栈名称 | 描述 |
|---|---|---|
|
|
| 使用 UDP 进行传输和 UDP 多播进行发现。适用于较大的集群(超过 100 个节点),或者使用复制缓存或无效模式。最小化打开的插槽数量。 |
|
|
|
使用 TCP 传输和 |
|
|
|
使用 TCP 进行传输, |
|
|
|
使用 TCP 进行传输,使用 |
|
|
|
使用 TCP 进行传输, |
|
|
|
使用 TCP 进行传输, |
6.2. 集群发现协议 复制链接链接已复制到粘贴板!
Data Grid 支持不同的协议,允许节点在网络上自动找到并形成集群。
Data Grid 可以使用两种发现机制:
- 在大多数网络上工作且不依赖于外部服务的通用发现协议。
-
依赖于外部服务的发现协议来存储和检索 Data Grid 集群的拓扑信息。
例如,DNS_PING 协议通过 DNS 服务器记录执行发现。
在托管平台上运行 Data Grid 需要使用针对各个云提供商实施的网络限制的发现机制。
6.2.1. PING 复制链接链接已复制到粘贴板!
PING 或 UDPPING 是一种通用 JGroups 发现机制,它使用 UDP 协议的动态多播。
加入后,节点将 PING 请求发送到 IP 多播地址,以发现已在 Data Grid 集群中的其他节点。每个节点通过包含协调器节点地址的数据包以及自己的地址来响应 PING 请求。C=coordinator 的地址和 A=own 地址。如果没有节点响应 PING 请求,则加入节点会成为新集群中的协调节点。
PING 配置示例
<PING num_discovery_runs="3"/>
<PING num_discovery_runs="3"/>
6.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"/>
6.2.3. MPING 复制链接链接已复制到粘贴板!
MPING 使用 IP 多播来发现 Data Grid 集群的初始成员资格。
您可以使用 MPING 将 TCPPING 发现替换为 TCP 堆栈,并使用 multicasing 进行发现,而不使用初始主机的静态列表。但是,您还可以将 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}"/>
6.2.4. TCPGOSSIP 复制链接链接已复制到粘贴板!
gossip 路由器在网络上提供一个中央位置,用于您的数据网格集群可以检索其他节点的地址。
您可以将 Gossip 路由器的地址(IP:PORT)注入 Data Grid 节点,如下所示:
-
将 address 作为系统属性传递给 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" />
6.2.5. JDBC_PING 复制链接链接已复制到粘贴板!
JDBC_PING 使用共享数据库存储数据网格集群的信息。此协议支持任何可以使用 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"/>
将适当的 JDBC 驱动程序添加到类路径中,以便 Data Grid 可以使用 JDBC_PING。
6.2.6. DNS_PING 复制链接链接已复制到粘贴板!
JGroups DNS_PING 查询 DNS 服务器,以便在 Kubernetes 环境中发现数据网格群集成员,如 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" />
6.2.7. 云发现协议 复制链接链接已复制到粘贴板!
Data Grid 包括默认的 JGroups 堆栈,它使用特定于云提供商的发现协议实现。
| 发现协议 | 默认堆栈文件 | 工件 | Version |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
为云发现协议提供依赖项
要使用 NATIVE_S3_PING、GOOGLE_PING2 或 AZURE_PING 云发现协议,您需要向 Data Grid 提供依赖的库。
流程
-
将工件依赖项添加到项目
pom.xml中。
然后,您可以将云发现协议配置为 JGroups 堆栈文件或系统属性的一部分。
6.3. 使用默认 JGroups 堆栈 复制链接链接已复制到粘贴板!
Data Grid 使用 JGroups 协议堆栈,以便节点可以在专用集群通道上发送其他消息。
Data Grid 为 UDP 和 TCP 协议提供预配置的 JGroups 堆栈。您可以使用这些默认堆栈作为构建自定义集群传输配置的起点,该配置根据您的网络要求进行了优化。
流程
执行以下操作之一使用默认 JGroups 堆栈之一:
使用
infinispan.xml文件中的stack属性。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
addProperty ()方法设置 JGroups 堆栈文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
Data Grid 记录以下信息以指示它使用的堆栈:
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
6.4. 自定义 JGroups 堆栈 复制链接链接已复制到粘贴板!
调整和调优属性,以创建适合您的网络要求的集群传输配置。
Data Grid 提供可让您扩展默认 JGroups 堆栈以方便配置的属性。您可以在合并、删除和替换其他属性时从默认堆栈继承属性。
流程
-
在
infinispan.xml文件中创建一个新的 JGroups 堆栈声明。 -
添加
extends属性,并指定 JGroups 堆栈来继承属性。 -
使用
stack.combine属性修改继承堆栈中配置的协议的属性。 -
使用
stack.position属性定义自定义堆栈的位置。 指定堆栈名称,作为
传输配置中stack属性的值。例如,您可以使用 Gossip 路由器和使用默认 TCP 堆栈的对称加密来评估,如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Data Grid 日志,以确保它使用堆栈。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stack
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stackCopy to Clipboard Copied! Toggle word wrap Toggle overflow
参考
- Data Grid 8.x 的 JGroups 集群传输配置 (红帽知识库文章)
6.4.1. 继承属性 复制链接链接已复制到粘贴板!
当您扩展 JGroups 堆栈时,继承属性允许您调整您要扩展的堆栈中的协议和属性。
-
stack.position指定要修改的协议。 stack.combine使用以下值来扩展 JGroups 堆栈:Expand 值 描述 组合覆盖协议属性。
REPLACE替换协议。
INSERT_AFTER在另一个协议后将协议添加到堆栈中。不会影响指定为插入点的协议。
JGroups 堆栈中的协议会根据堆栈中的位置相互影响。例如,您应该在
SYM_ENCRYPT或ASYM_ENCRYPT协议后放置NAKACK2等协议,以便保护NAKACK2。INSERT_BEFORE在另一个协议前,将协议插入到堆栈中。影响您指定为插入点的协议。
删除从堆栈中删除协议。
6.5. 使用 JGroups 系统属性 复制链接链接已复制到粘贴板!
在启动时将系统属性传递给 Data Grid,以调优群集传输。
流程
-
根据需要,使用
-D<property-name>=<property-value> 参数设置 JGroups 系统属性。
例如,设置自定义绑定端口和 IP 地址,如下所示:
java -cp ... -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
$ java -cp ... -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
当您将 Data Grid 集群嵌入到集群红帽 JBoss EAP 应用程序中时,JGroups 系统属性可以相互冲突或覆盖。
例如,您没有为 Data Grid 集群或 Red Hat JBoss EAP 应用程序设置唯一的绑定地址。在这种情况下,Data Grid 和 Red Hat JBoss EAP 应用程序都使用 JGroups 默认属性,并尝试使用相同的绑定地址组成集群。
6.5.1. 集群传输属性 复制链接链接已复制到粘贴板!
使用以下属性自定义 JGroups 集群传输。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| 集群传输的绑定地址。 |
| 选填 |
|
| 套接字的绑定端口。 |
| 选填 |
|
| 用于多播的 IP 地址,包括发现和集群间通信。IP 地址必须是适合 IP 多播的有效"类 D"地址。 |
| 选填 |
|
| 多播套接字的端口。 |
| 选填 |
|
| IP 多播数据包的时间到时间(TTL)。该值定义数据包在丢弃前可以进行的网络跃点数。 | 2 | 选填 |
|
| 线程池的最小线程数量。 | 0 | 选填 |
|
| 线程池的最大线程数。 | 200 | 选填 |
|
| 等待加入请求成功的最大毫秒数。 | 2000 | 选填 |
|
| 在记录线程转储前,线程池需要满的次数。 | 10000 | 选填 |
6.5.2. 云发现协议的系统属性 复制链接链接已复制到粘贴板!
使用以下属性为托管平台配置 JGroups 发现协议:
6.5.2.1. Amazon EC2 复制链接链接已复制到粘贴板!
用于配置 NATIVE_S3_PING 的系统属性。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| Amazon S3 区域的名称。 | 没有默认值。 | 选填 |
|
| Amazon S3 存储桶的名称。名称必须存在,并且必须是唯一的。 | 没有默认值。 | 选填 |
6.5.2.2. Google Cloud Platform 复制链接链接已复制到粘贴板!
用于配置 GOOGLE_PING2 的系统属性。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| Google Compute Engine 存储桶的名称。名称必须存在,并且必须是唯一的。 | 没有默认值。 | 必填 |
6.5.2.3. Azure 复制链接链接已复制到粘贴板!
AZURE_PING 的系统属性。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| Azure 存储帐户的名称。名称必须存在,并且必须是唯一的。 | 没有默认值。 | 必填 |
|
| Azure 存储访问密钥的名称。 | 没有默认值。 | 必填 |
|
| 存储 ping 信息的容器的有效 DNS 名称。 | 没有默认值。 | 必填 |
6.5.2.4. OpenShift 复制链接链接已复制到粘贴板!
DNS_PING 的系统属性。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| 设置返回群集成员的 DNS 记录。 | 没有默认值。 | 必填 |
6.6. 使用 Inline JGroups Stacks 复制链接链接已复制到粘贴板!
您可以将完整的 JGroups 堆栈定义插入到 infinispan.xml 文件中。
流程
在
infinispan.xml文件中嵌入自定义 JGroups 堆栈声明。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. 使用外部 JGroups 堆栈 复制链接链接已复制到粘贴板!
引用在 infinispan.xml 文件中定义自定义 JGroups 堆栈的外部文件。
流程
将自定义 JGroups 堆栈文件放在应用类路径上。
或者,您可以在声明外部堆栈文件时指定绝对路径。
使用
stack-file元素引用外部堆栈文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以使用 TransportConfigurationBuilder 类中的 addProperty () 方法来指定自定义 JGroups 堆栈文件,如下所示:
在本例中,my-jgroups-udp.xml 使用自定义属性引用 UDP 堆栈,如下所示:
自定义 UDP 堆栈示例
6.8. 使用自定义 JChannels 复制链接链接已复制到粘贴板!
构建自定义 JGroups JChannels,如下例所示:
网格无法使用已经连接的自定义 JChannels。
6.9. 加密集群传输 复制链接链接已复制到粘贴板!
保护集群传输,以便节点与加密消息通信。您还可以配置 Data Grid 集群来执行证书身份验证,以便只有具有有效身份的节点才能加入。
6.9.1. Data Grid 集群安全性 复制链接链接已复制到粘贴板!
为了保护集群流量,您需要配置 Data Grid 节点,以使用 secret 密钥加密 JGroups 消息有效负载。
Data Grid 节点可以从以下方法获取 secret 密钥:
- 协调器节点(symmetric 加密)。
- 共享密钥存储(symmetric encryption)。
从协调器节点检索 secret 密钥
您可以通过在 Data Grid 配置中的 JGroups 堆栈中添加 ASYM_ENCRYPT 协议来配置非对称加密。这允许 Data Grid 集群生成和分发 secret 密钥。
在使用非对称加密时,您还应提供密钥存储,以便节点能够执行证书身份验证并安全地交换机密密钥。这可保护集群不受中间人(MitM)攻击的影响。
非对称加密保护集群流量,如下所示:
- Data Grid 集群中的第一个节点(coordinator 节点)会生成一个 secret 密钥。
- 加入节点使用协调器执行证书身份验证,以互相验证身份。
- 加入的节点从 coordinator 节点请求 secret 密钥。该请求包含加入节点的公钥。
- 协调器节点使用公钥加密 secret 密钥,并将其返回到加入节点。
- 加入节点解密并安装 secret 密钥。
- 节点加入集群,使用 secret 密钥加密并解密信息。
从共享密钥存储检索 secret 密钥
您可以通过在 Data Grid 配置中的 JGroups 堆栈中添加 SYM_ENCRYPT 协议来配置对称加密。这允许 Data Grid 集群从您提供的密钥存储获取 secret 密钥。
- 节点在启动时从 Data Grid 类路径上的密钥存储安装 secret 密钥。
- 节点加入集群,使用 secret 密钥加密和解密消息。
非对称和对称加密的比较
带有证书身份验证的 ASYM_ENCRYPT 提供了额外的加密层,与 SYM_ENCRYPT 相比。您提供密钥存储来为 secret 密钥加密对协调节点的请求。Data Grid 会自动生成该 secret 密钥并处理集群流量,同时允许您指定何时生成 secret 密钥。例如,您可以配置集群以在节点离开时生成新的 secret 密钥。这样可确保节点无法绕过证书身份验证,并使用旧密钥加入。
另一方面,SYM_ENCRYPT 比 ASYM_ENCRYPT 快,因为节点不需要与集群协调器交换密钥。SYM_ENCRYPT 是没有配置在集群成员资格更改时自动生成新 secret 密钥的潜在缺陷。用户负责生成和分发节点用于加密集群流量的 secret 密钥。
6.9.2. 使用 Asymmetric Encryption 配置集群传输 复制链接链接已复制到粘贴板!
配置 Data Grid 集群,以生成和分发加密 JGroups 消息的 secret 密钥。
流程
- 使用证书链创建密钥存储,使 Data Grid 能够验证节点身份。
将密钥存储放在集群中每个节点的 classpath 上。
对于 Data Grid Server,您要将密钥存储放在 $RHDG_HOME 目录中。
将
SSL_KEY_EXCHANGE和ASYM_ENCRYPT协议添加到 Data Grid 配置中的 JGroups 堆栈,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
当您启动 Data Grid 集群时,以下日志消息表示集群使用 secure JGroups 堆栈:
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
只有在它们使用 ASYM_ENCRYPT 且可以从协调器节点获取 secret 密钥时,数据网格节点才能加入集群。否则,以下信息会写入 Data Grid 日志:
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参考
此流程中的 ASYM_ENCRYPT 配置示例显示了常用的参数。如需完整的可用参数集合,请参阅 JGroups 文档。
6.9.3. 使用 Symmetric 加密配置集群传输 复制链接链接已复制到粘贴板!
配置 Data Grid 集群,以使用您提供的密钥存储中的 secret 密钥加密 JGroups 消息。
流程
- 创建包含 secret 密钥的密钥存储。
将密钥存储放在集群中每个节点的 classpath 上。
对于 Data Grid Server,您要将密钥存储放在 $RHDG_HOME 目录中。
-
将
SYM_ENCRYPT协议添加到 Data Grid 配置中的 JGroups 堆栈。
验证
当您启动 Data Grid 集群时,以下日志消息表示集群使用 secure JGroups 堆栈:
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
只有在使用 SYM_ENCRYPT 且可以从共享密钥存储获取 secret 密钥时,数据网格节点才能加入集群。否则,以下信息会写入 Data Grid 日志:
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参考
此流程中的 SYM_ENCRYPT 配置示例显示了常用的参数。如需完整的可用参数集合,请参阅 JGroups 文档。
6.10. 集群流量的 TCP 和 UDP 端口 复制链接链接已复制到粘贴板!
Data Grid 对集群传输信息使用以下端口:
| 默认端口 | 协议 | 描述 |
|---|---|---|
|
| TCP/UDP | JGroups 集群绑定端口 |
|
| UDP | JGroups 多播 |
跨站点复制
Data Grid 为 JGroups RELAY2 协议使用以下端口:
7900- 对于在 OpenShift 上运行的 Data Grid 集群。
7800- 如果将 UDP 用于节点间的流量,使用 TCP 作为集群之间的流量。
7801- 如果将 TCP 用于节点和 TCP 间的流量,用于集群之间的流量。