迁移到 Data Grid 8
将部署和应用程序迁移到 Data Grid 8
摘要
Red Hat Data Grid
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 Data Grid 8
通过概述开始迁移到 Data Grid 8 的旅程,并参阅一些基础知识。
1.1. 迁移到 Data Grid 8
Data Grid 8 引入了来自以前 Data Grid 版本(包括用于服务器部署的整个新架构)的显著变化。
虽然这对于现有环境迁移的某些方面更具挑战性,但数据网格团队认为这些更改可以通过降低部署复杂性和管理开销来使用户受益。
与之前的版本相比,迁移到 Data Grid 8 意味着您可以获得:
- 为容器平台构建的云原生设计。
- 更小的内存占用率和整体资源使用率更少。
- 更快的开始时间。
- 通过更小的攻击面提高安全性。
- 更好地与红帽技术和解决方案集成。
Data Grid 8 继续为您提供从尝试和受信任的开源技术构建的最佳内存数据存储功能。
1.2. 迁移路径
本文档侧重于 Data Grid 7.3 到 Data Grid 8 的迁移,但仍然适用于 7.x 版本,从 7.0.1 开始。
如果您计划从 Data Grid 6 迁移,则本文档可能无法捕获您需要的所有内容。在迁移前,您应该联系红帽支持以获取特定于您的部署的建议。
因此,请通过改进本文档来告知我们是否可以帮助您。
1.3. 组件下载
要开始使用 Data Grid 8,您可以:
- 如果要在裸机或其他主机环境中安装 Data Grid,请从红帽客户门户网站下载组件。
- 如果您在 OpenShift 上运行,请创建一个 Data Grid Operator 订阅。
以下信息描述了裸机部署的可用组件下载,它们与之前版本的 Data Grid 不同。
另请参阅:
Maven 存储库
Data Grid 8 不再为以下组件提供独立于红帽客户门户网站的下载:
- 用于在自定义应用程序中创建嵌入式缓存的数据网格核心库,在之前的版本中称为"Library Mode"。
- 热 Rod Java 客户端.
-
StoreMigrator
等实用程序。
Data Grid 通过 Maven 存储库提供 Java 工件,而不是以下载的形式提供这些组件。此更改意味着您可以使用 Maven 集中管理依赖项,从而更好地控制跨项目的依赖项。
您可以从客户门户网站下载 Data Grid Maven 存储库,或者从公共 Red Hat Enterprise Maven 存储库拉取 Data Grid 依赖项。有关这两种方法的说明,请参见 Data Grid 文档。
Data Grid Server
Data Grid Server 作为存档分发,您可以下载并提取到主机文件系统。
归档分发包含以下顶级文件夹:
├── bin 1 ├── boot 2 ├── docs 3 ├── lib 4 ├── server 5 └── static 6
server
文件夹是 Data Grid Server 实例的根目录,包含自定义代码库、配置文件和数据的子目录。
您可以在 Data Grid Server Guide 中找到有关发行版的文件系统和内容的更多信息。
源代码
每个 Data Grid 发行版本没有编译的源代码。
第 2 章 迁移 Data Grid Server 部署
查看本节中的详情,以计划并准备成功迁移 Data Grid 服务器。
2.1. Data Grid Server 8
Data Grid Server 8 是:
- 专为现代系统架构而设计。
- 专为容器化平台构建。
- 优化用于使用 Quarkus 的原生镜像编译。
过渡到云原生架构意味着,Data Grid Server 8 不再基于 Red Hat JBoss Enterprise Application Platform (EAP)。相反,Data Grid Server 8 基于 Netty 项目的客户端/服务器框架。
此更改会影响之前版本进行的迁移,因为提供的许多与 EAP 集成的功能不再与 Data Grid 8 相关或已更改。
例如,与之前的版本相比,服务器配置的复杂性会大大降低,但您需要将现有配置适应新的模式。与之前版本相比,数据网格 8 也提供了更多的服务器配置惯例,可以达到更为精细的配置。此外,Data Grid Server 不再利用域模式来集中管理配置。
Data Grid 团队确认这些配置更改会对我们的客户进行额外的工作,以便将其现有集群迁移到 Data Grid 8。
我们相信,最好使用容器编配平台(如 Red Hat OpenShift)来配置和管理 Data Grid 集群以及自动化引擎(如 Red Hat Ansible)来管理数据网格配置。这些技术提供了更大的灵活性,它们更加通用且适用于多个不同的系统,而不是更特定于 Data Grid 的解决方案。
在迁移到 Data Grid 8 时,值得注意,Red Hat Ansible 等解决方案对大规模配置部署非常有用。但是,这些工具可能不一定有助于您现有的 Data Grid 配置的实际迁移。
2.2. Data Grid 服务器配置
Data Grid 提供了一个可扩展的数据层,可让您智能、高效地使用可用的计算资源。为了通过数据网格服务器部署实现此目的,配置被分为两个层: dynamic 和 static。
动态配置
动态配置是可变的,在运行时更改,在创建缓存时,向集群添加和删除节点。
部署 Data Grid Server 集群后,您可以通过 Data Grid CLI、Data Grid Console 或 Hot Rod 和 REST 端点创建缓存。Data Grid Server 将这些缓存永久存储为跨节点分布的集群状态的一部分。每个加入节点都会收到在发生更改时,Data Grid Server 会在所有节点间自动同步的完整集群状态。
静态配置
静态配置不可变,在运行时保持不变。
在设置底层机制时,您可以定义静态配置,如集群传输、身份验证和加密、共享数据源等。
默认情况下,Data Grid 服务器使用 $RHDG_HOME/server/conf/infinispan.xml
进行静态配置。
配置的根元素是 infinispan
,并声明两个基本模式:
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:15.0 https://infinispan.org/schemas/infinispan-config-15.0.xsd urn:infinispan:server:15.0 https://infinispan.org/schemas/infinispan-server-15.0.xsd" xmlns="urn:infinispan:config:15.0" xmlns:server="urn:infinispan:server:15.0">
-
urn:infinispan:config
模式验证缓存容器等核心 Infinispan 功能的配置。 -
urn:infinispan:server
模式验证 Data Grid Server 的配置。
缓存容器配置
您可以使用 cache-container
元素配置 CacheManager
接口,它提供管理缓存生命周期的机制:
<!-- Creates a cache manager named "default" that exports statistics. --> <cache-container name="default" statistics="true"> <!-- Defines cluster transport properties, including the cluster name. --> <!-- Uses the default TCP stack for inter-cluster communication. --> <transport cluster="${infinispan.cluster.name}" stack="${infinispan.cluster.stack:tcp}" node-name="${infinispan.node.name:}"/> </cache-container>
cache-container
元素也可以包含以下配置元素:
-
缓存管理器
的安全性
。 -
MicroProfile 兼容指标的指标。
-
JMX
用于 JMX 监控和管理.
在以前的版本中,您可以在 Data Grid 配置中定义多个 cache-container
元素,以便在不同的端点上公开缓存容器。
在 Data Grid 8 中,不得配置多个缓存容器,因为 Data Grid CLI 和 Console 只能处理每个集群的一个缓存管理器。但是,如果需要,您可以将缓存容器的名称更改为比"default"更有意义的环境。
您应该使用单独的 Data Grid 集群来实现多租户,以确保缓存管理器不会相互干扰。
服务器配置
您可以使用 server
元素配置底层 Data Grid 服务器机制:
<server> <interfaces> <interface name="public"> 1 <inet-address value="${infinispan.bind.address:127.0.0.1}"/> 2 </interface> </interfaces> <socket-bindings default-interface="public" 3 port-offset="${infinispan.socket.binding.port-offset:0}"> 4 <socket-binding name="default" 5 port="${infinispan.bind.port:11222}"/> 6 <socket-binding name="memcached" port="11221"/> 7 </socket-bindings> <security> <security-realms> 8 <security-realm name="default"> 9 <server-identities> 10 <ssl> <keystore path="application.keystore" 11 keystore-password="password" alias="server" key-password="password" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities> <properties-realm groups-attribute="Roles"> 12 <user-properties path="users.properties" 13 relative-to="infinispan.server.config.path" plain-text="true"/> 14 <group-properties path="groups.properties" 15 relative-to="infinispan.server.config.path" /> </properties-realm> </security-realm> </security-realms> </security> <endpoints socket-binding="default" security-realm="default" /> 16 </server>
- 1
- 创建名为"public"的接口,使服务器在您的网络上可用。
- 2
- 将
127.0.0.1
环回地址用于公共接口。 - 3
- 将公共接口绑定到 Data Grid Server 端点侦听传入客户端连接的网络端口。
- 4
- 为网络端口指定偏移 0。
- 5
- 创建名为 "default" 的套接字绑定。
- 6
- 为套接字绑定指定端口
11222
。 - 7
- 为 Memcached 连接器在端口
11221
创建套接字绑定。 - 8
- 定义保护端点不受网络入侵的安全域。
- 9
- 创建名为"default"的安全域。
- 10
- 配置用于身份验证的 SSL/TLS 密钥存储。
- 11
- 指定包含服务器证书的密钥存储。
- 12
- 配置"默认"安全域,以使用属性文件来定义将用户映射到角色的用户和组。
- 13
- 命名包含 Data Grid 用户的属性文件。
- 14
- 指定
users.properties
文件的内容存储为纯文本。 - 15
- 命名将 Data Grid 用户映射到角色的属性文件。
- 16
- 使用 Hot Rod 和 REST 连接器配置端点。
本例显示隐式
hotrod-connector
和rest-connector
元素,这是 Data Grid 8.2 的默认设置。
8.0 和 8.1 中的数据网格服务器配置使用明确声明的 Hot Rod 和 REST 连接器。
2.3. 对 Data Grid Server 8.2 配置模式的更改
在以前的 7.x 版本中,Data Grid Server 没有单独的模式。本主题列出了 8.1 和 8.2 之间 Data Grid Server 配置模式的更改。
安全授权
从 Data Grid 8.2 开始,服务器配置默认启用授权,以根据角色和权限限制用户访问。
<cache-container name="default" statistics="true">
<transport cluster="${infinispan.cluster.name:cluster}"
stack="${infinispan.cluster.stack:tcp}"
node-name="${infinispan.node.name:}"/>
<security>
<authorization/> 1
</security>
</cache-container>
- 1
- 为服务器管理和管理以及缓存管理器生命周期启用授权。您可以删除
authorization
元素来禁用安全授权。
客户端信任存储
从 Data Grid 8.2 开始,您可以在服务器身份配置中添加客户端信任存储,并使用 truststore-realm
元素来验证证书。
8.1
<security-realm name="default"> <server-identities> <ssl> <keystore path="server.pfx" keystore-password="password" alias="server"/> </ssl> </server-identities> <truststore-realm path="trust.pfx" password="secret"/> </security-realm>
8.2
<security-realm name="default"> <server-identities> <ssl> <keystore path="server.pfx" keystore-password="password" alias="server"/> <truststore path="trust.pfx" password="secret"/> 1 </ssl> </server-identities> <truststore-realm/> 2 </security-realm>
端点连接器
从 Data Grid 8.2 开始,在默认 端点
配置中隐式设置 hotrod-connector
和 rest-connector
元素。
<endpoints socket-binding="default" security-realm="default"/>
修改的元素和属性
-
路径
、provider
、store-password
和relative-to
属性已从truststore-realm
元素中删除。 -
name
属性添加到truststore-realm
元素。
新元素和属性
credential-stores
子元素添加到security
元素。credential-stores
元素还包含credential-store
、clear-text-credential
和credential-reference
子元素。默认情况下,以下内容包含在服务器配置中:
<credential-stores> <credential-store name="credentials" path="credentials.pfx"> <clear-text-credential clear-text="secret"/> </credential-store> </credential-stores>
-
ip-filter
,接受
,并拒绝
添加到 endpoint元素中
的子元素。 -
security-realm
属性添加到hotrod-connector
和rest-connector
元素。 -
cache-max-size
和cache-lifespan
已添加到security-realm
元素,以配置条目的身份缓存和生命周期的大小。 -
truststore
子元素添加到ssl
元素中,用于指定信任存储以验证客户端证书。
弃用的元素和属性
以下元素和属性现已弃用:
-
authentication
元素上的security-realm
属性。 -
encryption
元素上的security-realm
属性。
删除的元素和属性
Data Grid 8.2 中不会删除元素或属性。
2.4. 对 Data Grid Server 8.3 配置模式的更改
本主题列出了 8.2 和 8.3 之间 Data Grid Server configuration schema 的更改。
模式更改
-
urn:infinispan:server
命名空间中的endpoint
元素不再是一个重复的元素,而是 0 个或更多端点元素的打包程序。
Data Grid Server 8.2
<endpoints socket-binding="default" security-realm="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
Data Grid Server 8.3
<endpoints> <endpoint socket-binding="public" security-realm="application-realm" admin="false"> <hotrod-connector/> <rest-connector/> </endpoint> <endpoint socket-binding="private" security-realm="management-realm"> <hotrod-connector/> <rest-connector/> </endpoint> </endpoints>
修改的元素和属性
Data Grid 8.3 中没有修改元素或属性。
新元素和属性
-
带有
socket-binding
和security-realm
的端点元素允许您定义endpoints
元素中包含的多个端点配置。 -
security-realm-distributed
元素来组合多个安全域。 -
security-realm
元素的default-realm
属性指定一个默认安全域,这是声明的第一个安全域,除非您指定了不同的域。 -
security-realm
元素的name
属性来逻辑地分隔同一类型的多个域。 -
hotrod-connector
元素上的network-prefix-override
属性配置是否将主机系统提供的子网掩码用于接口,或使用遵循 IANA 专用地址惯例的子网掩码进行覆盖。 -
sasl
元素上的policy
属性,以列出过滤可用机制集的策略。 -
ldap-realm
元素上的client-ssl-context
属性指定一个域,它提供信任存储来验证 SSL/TLS 连接的客户端。
弃用的元素和属性
以下元素和属性现已弃用:
-
regex-principal-transformer
元素的name
属性现在会被忽略。 -
TLS/SSL 服务器身份的
keystore
元素上的keystore-password
属性已弃用。改为使用password
属性。
删除的元素和属性
Data Grid 8.3 中没有删除元素或属性。
2.5. 对 Data Grid Server 8.4 配置模式的更改
本主题列出了 8.3 和 8.4 之间的 Data Grid Server 配置模式的更改。
模式更改
Data Grid 8.4 中没有进行架构更改。
修改的元素和属性
配置数据源连接池的以下属性现在具有默认值:
-
max-size
默认为2147483647
,这意味着池中连接数量没有限制。 -
min-size
默认为0,
这意味着池启动时可以为空。 -
initial-size
默认为0,
这意味着最初不会创建任何连接。
配置数据源连接池的以下属性将默认值设为 0,
这意味着禁用这些功能。
-
background-validation
-
validate-on-acquisition
-
leak-detection
-
idle-removal
新元素和属性
-
RESP
-connector
元素为 Data Grid 启用 RESP 端点。 -
connection-property
元素的新maxOccurs
属性指定此元素可能发生的最大次数。maxOccurs
的默认值为unbounded
。 -
masked-credential
complexType
,它为凭据密钥存储添加屏蔽密码。masked
属性以MASKED_VALUE;SALT;ITERATION
格式指定屏蔽的密码。 -
command-credential
会执行外部命令,提供凭据密钥存储的密码。command
属性指定外部命令。
弃用的元素和属性
Data Grid 8.4 中没有元素和属性已弃用。
删除的元素和属性
-
protocol-connector
元素上的worker-threads
属性现已被删除。 -
security-realm-filesystem
元素现已被删除。
2.6. 对 Data Grid Server 8.5 配置模式的更改
本主题列出了在 8.4 和 8.5 之间对 Data Grid Server 配置模式的更改。
修改的元素和属性
-
ldap-name-rewriter
元素已重命名为name-rewriter
。
新元素和属性
-
security-evidence-decoder
元素,可让您将证据解码器指定为x500-subject-evidence-decoder
,或x509-subject-alt-name-evidence-decoder
。 -
memcached-connector
中的authentication
元素 -
memcached-connector
中的加密
元素 -
memcached-connector
中的protocol
属性可让您设置要使用的 Memcached 协议。 -
memcached-connector
中的security-realm
属性可让您定义用于身份验证的安全域、缓存授权和加密。 -
rest-connector
中的compression-level
属性值现在默认为6
。 -
rest-connector
中的compression-threshold
属性可让您在响应正文的大小超过阈值时为响应正文设置压缩。该值应该是非负数。0
为所有响应启用压缩。 -
rest-connector
中的require-ssl-client-auth
属性现在不是可选的。 -
security-realm
中的evidence-decoder
元素 -
security-realm
中的aggregate-realm
元素 -
security-realm
中的cache-lifespan
属性现在默认为60000
而不是-1
。 -
security-realm-properties
中的groups-attribute
属性现在具有默认值Roles
-
name-rewriter
中的case-principal-transformer
元素 -
name-rewriter
中的common-name-principal-transformer
元素
弃用的元素和属性
Data Grid 8.5 中没有弃用元素和属性。
删除的元素和属性
Data Grid 8.5 中不会删除任何元素和属性。
2.7. Data Grid Server 端点和网络配置
本节论述了从之前的版本迁移时的数据网格服务器端点和网络配置。
Data Grid 8 通过使用单一网络接口和端口来公开网络上的端点,从而简化了服务器端点配置。
2.7.1. 接口
接口绑定了向网络位置公开端点。
Data Grid Server 7.x 网络接口配置
在 Data Grid 7.x 中,服务器配置使用不同的接口来分离对缓存访问的管理和管理访问。
<interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:127.0.0.1}"/> </interface> </interfaces>
Data Grid Server 8 网络接口配置
在 Data Grid 8 中,所有客户端连接都有一个网络接口来管理和管理访问,以及缓存访问。
<interfaces> <interface name="public"> <inet-address value="${infinispan.bind.address:127.0.0.1}"/> </interface> </interfaces>
2.7.2. 套接字绑定
套接字绑定将网络接口映射到端点侦听客户端连接的端口。
Data Grid Server 7.x 套接字绑定配置
在 Data Grid 7.x 中,服务器配置使用唯一端口来管理和管理,例如 9990
用于管理管理控制台和端口 9999
。旧版本也为每个端点使用唯一端口,如 11222
用于外部 Hot Rod 访问和 8080
用于 REST。
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="hotrod" port="11222"/> <socket-binding name="hotrod-internal" port="11223"/> <socket-binding name="hotrod-multi-tenancy" port="11224"/> <socket-binding name="memcached" port="11211"/> <socket-binding name="rest" port="8080"/> ... </socket-binding-group>
Data Grid Server 8 单端口配置
Data Grid 8 使用单一端口来处理到服务器的所有连接。热 Rod 客户端、REST 客户端、Data Grid CLI 和 Data Grid 控制台全部使用端口 11222
。
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}"> <socket-binding name="default" port="${infinispan.bind.port:11222}"/> <socket-binding name="memcached" port="11221"/> </socket-bindings>
2.7.3. Endpoints
端点侦听远程客户端连接并处理通过 Hot Rod 和 HTTP (REST)等协议的请求。
Data Grid CLI 将 REST 端点用于所有缓存和管理操作。
Data Grid Server 7.x endpoint subsystem
在 Data Grid 7.x 中,端点
子系统允许您为 Hot Rod 和 REST 端点配置连接器。
<subsystem xmlns="urn:infinispan:server:endpoint:9.4"> <hotrod-connector socket-binding="hotrod" cache-container="local"> <topology-state-transfer lazy-retrieval="false" lock-timeout="1000" replication-timeout="5000"/> </hotrod-connector> <rest-connector socket-binding="rest" cache-container="local"> <authentication security-realm="ApplicationRealm" auth-method="BASIC"/> </rest-connector> </subsystem>
Data Grid Server 8 端点配置
Data Grid 8 将 endpoint
子系统替换为 endpoint
元素。hotrod-connector
和 rest-connector
配置元素和属性与之前的版本相同。
从 Data Grid 8.2 开始,默认 端点配置
使用隐式 Hot Rod 和 REST 连接器,如下所示:
<endpoints socket-binding="default" security-realm="default"/>
Data Grid Server 8.0 到 8.2
<endpoints socket-binding="default" security-realm="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
从 Data Grid Server 8.3 开始,您可以使用安全域和 Hot Rod 或 REST 连接器配置端点,并带有 端点
元素。endpoint
元素现在是多个端点配置的打包程序。
Data Grid Server 8.3 及更新的版本
<endpoints> <endpoint socket-binding="public" security-realm="application-realm" admin="false"> <hotrod-connector/> <rest-connector/> </endpoint> <endpoint socket-binding="private" security-realm="management-realm"> <hotrod-connector/> <rest-connector/> </endpoint> </endpoints>
其他资源
2.8. 数据网格服务器安全
数据网格服务器安全配置身份验证和加密,以防止网络攻击和保护数据。
2.8.1. 安全域
在 Data Grid 8 安全域中提供隐式配置选项,这意味着您不需要提供多个设置。例如,如果您定义了 Kerberos 域,则获得 Kerberos 功能。如果添加信任存储,您将获得证书身份验证。
在 Data Grid 7.x 中,有两个默认安全域:
-
ManagementRealm
保护管理 API。 -
ApplicationRealm
保护端点和远程客户端连接。
另一方面,Data Grid 8 提供了一个 security
元素,允许您定义可用于 Hot Rod 和 REST 端点的多个不同安全域:
<security> <security-realms> ... </security-realms> </security>
支持的安全域
-
属性域使用属性文件
users.properties
和groups.properties
来定义可以访问 Data Grid 的用户和组。 - LDAP 域连接到 LDAP 服务器,如 OpenLDAP、红帽目录服务器、Apache 目录服务器或 Microsoft Active Directory,以验证用户并获取成员资格信息。
- 信任存储域使用密钥存储,其中包含允许访问 Data Grid 的所有客户端的公共证书。
- 令牌域使用外部服务来验证令牌,并需要与 RFC-7662 (OAuth2 Token Introspection)兼容的提供程序,如 Red Hat SSO。
2.8.2. 服务器身份
服务器身份使用证书链来证明 Data Grid Server 身份提供给远程客户端。
Data Grid 8 使用与之前版本相同的配置来定义 SSL 身份,并改进一些可用性。
- 如果安全域包含 SSL 身份,Data Grid 会自动为该安全域的端点启用加密。
-
对于测试和开发环境,Data Grid 包含一个
generate-self-signed-certificate-host
属性,它可在启动时自动生成密钥存储。
<security-realm name="default"> <server-identities> <ssl> <keystore path="..." relative-to="..." keystore-password="..." alias="..." key-password="..." generate-self-signed-certificate-host="..."/> </ssl> </server-identities> ... <security-realm>
2.8.3. 端点身份验证机制
热 Rod 和 REST 端点使用 SASL 或 HTTP 机制来验证客户端连接。
Data Grid 8 对 hotrod-connector
和 rest-connector
配置使用 相同的身份验证
元素,如 Data Grid 7.x 及更早版本中。
<hotrod-connector name="hotrod"> <authentication> <sasl mechanisms="..." server-name="..."/> </authentication> </hotrod-connector> <rest-connector name="rest"> <authentication> <mechanisms="..." server-principal="..."/> </authentication> </rest-connector>
与之前版本的一个关键区别在于,Data Grid 8 支持端点的额外身份验证机制。
热 Rod SASL 身份验证机制
热 Rod 客户端现在使用 SCRAM-SHA-512
作为默认的身份验证机制,而不是 DIGEST-MD5
。
如果使用属性安全域,则必须使用 PLAIN
身份验证机制。
身份验证机制 | 描述 | 相关详情 |
---|---|---|
|
以纯文本格式使用凭据。您应该只在加密连接中使用 |
与 |
|
使用哈希算法和非ce 值。热 Rod 连接器支持 |
与 |
|
除了哈希算法和非ce 值外,还使用 salt 值。热 Rod 连接器支持 |
与 |
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
与 |
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
与 |
| 使用客户端证书。 |
与 |
|
使用 OAuth 令牌并需要一个 |
与EARER |
HTTP (REST)身份验证机制
身份验证机制 | 描述 | 相关详情 |
---|---|---|
|
以纯文本格式使用凭据。您应该只使用带有加密连接的 |
对应于 |
|
使用哈希算法和非ce 值。REST 连接器支持 |
对应于 |
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
对应于 |
|
使用 OAuth 令牌并需要一个 |
对应于 |
| 使用客户端证书。 |
与 |
2.8.4. 对 EAP 应用进行身份验证
现在,您可以通过将凭证添加到 EAP 应用程序类路径上的 hotrod-client.properties
中,以便与 Data Grid 进行身份验证:
-
远程缓存容器(
remote-cache-container
) -
远程存储(
remote-store
) - EAP 模块
2.8.5. 日志记录
Data Grid 使用 Apache Log4j2,而不是之前版本基于 JBossLogManager 的 logging 子系统。
默认情况下,Data Grid 将日志消息写入以下目录:$RHDG_HOME/${infinispan.server.root}/log
server.log
是默认的日志文件。
访问日志
在以前的版本中,Data Grid 包含一个日志记录器,用于审计日志缓存的安全日志:
<authorization audit-logger="org.infinispan.security.impl.DefaultAuditLogger">
Data Grid 8 不再提供这个审计日志记录器。
但是,您可以将日志类别用于 Hot Rod 和 REST 端点:
-
org.infinispan.HOTROD_ACCESS_LOG
-
org.infinispan.REST_ACCESS_LOG
其他资源
2.9. 分离数据网格服务器端点
从之前的版本迁移时,您可以为 Data Grid 端点创建不同的网络位置,以匹配现有的配置。但是,由于 Data Grid 架构已更改,且现在对所有客户端连接使用一个端口,因此并非所有版本中的所有选项都可用。
Data Grid CLI 和控制台等管理工具使用 REST API。在不禁用 Data Grid CLI 和控制台的情况下,您无法从端点配置中删除 REST API。同样,您无法分隔 REST 端点,以使用不同的端口或套接字绑定进行缓存访问和管理访问。
流程
为 REST 和 Hot Rod 端点定义单独的网络接口。
例如,定义一个"公共"接口,以在外部公开 Hot Rod 端点,以及一个"私有"接口,以在具有受限访问权限的网络位置上公开 REST 端点。
<interfaces> <interface name="public"> <inet-address value="${infinispan.bind.address:198.51.100.0}"/> </interface> <interface name="private"> <inet-address value="${infinispan.bind.address:192.0.2.0}"/> </interface> </interfaces>
此配置会创建:
-
具有
198.51.100.0
IP 地址的 "public" 接口。 -
具有
192.0.2.0
IP 地址的"私有"接口。
-
具有
为端点配置单独的套接字绑定,如下例所示:
<socket-bindings default-interface="private" port-offset="${infinispan.socket.binding.port-offset:0}"> <socket-binding name="default" port="${infinispan.bind.port:8080}"/> <socket-binding name="hotrod" interface="public" port="11222"/> </socket-bindings>
这个示例:
- 将"private"接口设置为套接字绑定的默认接口。
-
创建使用端口
8080
的"默认"套接字绑定。 -
创建使用"公共"接口和端口
11222
的"热形"套接字绑定。
为端点创建单独的安全域,例如:
<security> <security-realms> <security-realm name="truststore"> <server-identities> <ssl> <keystore path="server.p12" relative-to="infinispan.server.config.path" keystore-password="secret" alias="server"/> </ssl> </server-identities> <truststore-realm path="trust.p12" relative-to="infinispan.server.config.path" keystore-password="secret"/> </security-realm> <security-realm name="kerberos"> <server-identities> <kerberos keytab-path="http.keytab" principal="HTTP/localhost@INFINISPAN.ORG" required="true"/> </server-identities> </security-realm> </security-realms> </security>
这个示例:
- 配置信任存储安全域。
- 配置 Kerberos 安全域。
配置端点,如下所示:
<endpoints> <endpoint socket-binding="default" security-realm="kerberos"> <hotrod-connector/> <rest-connector/> </endpoint> <endpoint socket-binding="hotrod" security-realm="truststore"> <hotrod-connector/> <rest-connector/> </endpoint> </endpoints>
启动 Data Grid Server。
日志包含以下消息,用于指示端点接受客户端连接的网络位置:
[org.infinispan.SERVER] ISPN080004: Protocol HotRod listening on 198.51.100.0:11222 [org.infinispan.SERVER] ISPN080004: Protocol SINGLE_PORT listening on 192.0.2.0:8080 [org.infinispan.SERVER] ISPN080034: Server '<hostname>' listening on http://192.0.2.0:8080
后续步骤
-
从任何浏览器访问 Data Grid 控制台
http://192.0.2.0:8080
将 Data Grid CLI 配置为连接到自定义位置,例如:
$ bin/cli.sh -c http://192.0.2.0:8080
2.10. Data Grid Server shared datasources
Data Grid 7.x JDBC 缓存存储可以使用 PooledConnectionFactory
获取数据库连接。
借助 Data Grid 8,您可以在服务器配置中创建受管数据源,以使用 JDBC 缓存存储优化数据库连接的连接和性能。
数据源配置由两个部分组成:
-
定义如何连接到数据库的
连接工厂
。 -
定义如何
池和重复使用连接的连接池
,并且基于 Agroal。
您首先在服务器配置中定义数据源连接工厂和连接池,然后将其添加到您的 JDBC 缓存存储配置中。
有关迁移 JDBC 缓存存储的更多信息,请参阅本文档中的 迁移缓存存储 部分。
其他资源
2.11. Data Grid Server JMX 和指标
Data Grid 8 通过 JMX 和 /metrics
端点公开指标,以便与 Prometheus 等指标工具集成。
/metrics
端点提供:
- 返回值的量表,如 JVM 运行时间或缓存操作的平均秒数。
- 直方图显示了读取、写入和删除操作所需的时间(以百分比表示)。
在以前的版本中,Prometheus 指标由映射 JMX 指标的代理收集,而不是原生支持。
以前版本的 Data Grid 也使用 JBoss Operations Network (JON)插件来获取指标并执行操作。Data Grid 8 不再使用 JON 插件。
Data Grid 8 将 JMX 和 Prometheus 指标分成缓存管理器和缓存级别配置。
<cache-container name="default" statistics="true"> 1 <jmx enabled="true" /> 2 </cache-container>
<distributed-cache name="mycache" statistics="true" /> 1
- 1
- 为缓存启用统计信息。
其他资源
2.12. Data Grid Server cheatsheet
使用以下命令和示例作为用于 Data Grid 服务器的快速参考。
启动服务器实例
Linux
$ bin/server.sh
Microsoft Windows
$ bin\server.bat
启动 CLI
Linux
$ bin/cli.sh
Microsoft Windows
$ bin\cli.bat
创建用户
Linux
$ bin/cli.sh user create myuser -p "qwer1234!"
Microsoft Windows
$ bin\cli.bat user create myuser -p "qwer1234!"
停止服务器实例
单个服务器实例
[//containers/default]> shutdown server $hostname
整个集群
[//containers/default]> shutdown cluster
列出可用的命令选项
使用 -h
标志列出用于运行服务器的可用命令选项。
Linux
$ bin/server.sh -h
Microsoft Windows
$ bin\server.bat -h
7.x 到 8 参考
7.x | 8.x |
---|---|
|
|
|
|
|
|
|
|
|
|
其他资源
第 3 章 迁移 Data Grid 配置
查找影响迁移到 Data Grid 8 的 Data Grid 配置的更改。
3.1. Data Grid 缓存配置
默认情况下,Data Grid 8 提供空的缓存容器。当您启动 Data Grid 时,它会实例化一个缓存管理器,以便在运行时创建缓存。
但是,与之前的版本相比,开箱即用"默认"缓存。
在 Data Grid 8 中,通过 CacheContainerAdmin
API 创建的缓存是永久的,以确保集群重启后保留。
永久缓存
.administration()
.withFlags(AdminFlag.PERMANENT) 1
.getOrCreateCache("myPermanentCache", "org.infinispan.DIST_SYNC");
- 1
AdminFlag.PERMANENT
默认是启用的,以确保重新启动后缓存。
在创建缓存时,您不需要设置此标志。但是,您必须将持久性存储单独添加到 Data Grid 中,以便数据重启后保留,例如:
ConfigurationBuilder b = new ConfigurationBuilder(); b.persistence() .addSingleFileStore() .location("/tmp/myDataStore") .maxEntries(5000);
volatile 缓存
.administration() .withFlags(AdminFlag.VOLATILE) 1 .getOrCreateCache("myTemporaryCache", "org.infinispan.DIST_SYNC"); 2
Data Grid 8 为服务器安装提供缓存模板,您可以使用它来创建带有推荐的设置的缓存。
您可以获取可用缓存模板列表,如下所示:
通过 CLI 使用
Tab
自动完成功能:[//containers/default]> create cache --template=
使用 REST API:
GET 127.0.0.1:11222/rest/v2/cache-managers/default/cache-configs/templates
3.1.1. 缓存编码
当您创建远程缓存时,您应该为键和值配置 MediaType。配置 MediaType 为您的数据保证存储格式。
要对缓存进行编码,您可以在配置中指定 MediaType。除非您有其他要求,否则应使用 ProtoStream,它以语言中立、向后兼容的格式存储数据。
<encoding media-type="application/x-protostream"/>
使用编码的分布式缓存配置
<infinispan> <cache-container> <distributed-cache name="myCache" mode="SYNC"> <encoding media-type="application/x-protostream"/> ... </distributed-cache> </cache-container> </infinispan>
如果您不对远程缓存进行编码,Data Grid 服务器会记录以下信息:
WARN (main) [org.infinispan.encoding.impl.StorageConfigurationManager] ISPN000599: Configuration for cache 'mycache' does not define the encoding for keys or values. If you use operations that require data conversion or queries, you should configure the cache with a specific MediaType for keys or values.
在以后的版本中,对进行数据转换的操作需要缓存编码;例如,缓存索引和搜索数据容器、远程任务执行、读取和写入来自 Hot Rod 和 REST 端点的不同格式的数据,以及使用远程过滤器、转换器和监听器。
3.1.2. 缓存健康状态
Data Grid 7.x 包括一个 Health Check API,它返回集群的健康状况以及其中的缓存。
Data Grid 8 还提供 Health API。对于嵌入式和服务器安装,您可以使用以下 MBean 通过 JMX 访问 Health API:
org.infinispan:type=CacheManager,name="default",component=CacheContainerHealth
Data Grid Server 还通过 REST 端点和 Data Grid 控制台公开 Health API。
7.x | 8.x | 描述 |
---|---|---|
|
| 表示缓存按预期运行。 |
|
| 表示缓存处于重新平衡状态,但如预期运行。 |
|
| 表示缓存无法按预期工作,可能需要进行故障排除。 |
N/A |
| 在 8.2 中添加,以指示缓存无法在提供的配置中启动。 |
其他资源
3.1.3. 对 Data Grid 8.1 配置模式的更改
本主题列出了 8.0 和 8.1 之间 Data Grid 配置模式的更改。
新的和修改的元素和属性
-
堆栈
添加了对 inline JGroups 堆栈定义的支持。 -
stack.combine
和stack.position
属性允许您覆盖和修改 JGroups 堆栈定义。 -
指标
允许您配置 Data Grid 导出与 Eclipse MicroProfile Metrics API 兼容的指标。 -
通过
context-initializer
,您可以指定一个SerializationContextInitializer
实现,用于初始化用户类型的基于 Protostream 的 marshaller。 -
key-transformers
可让您注册转换程序,将自定义密钥转换为 String 进行索引。 -
现在,
统计信息
默认为 "false"。
弃用的元素和属性
以下元素和属性现已弃用:
-
off-heap
元素的address-count
属性。 -
事务
元素的protocol
属性。 -
jmx
元素的duplicate-domains
属性。 -
advanced-externalizer
-
custom-interceptors
-
state-transfer-executor
-
transaction-protocol
删除的元素和属性
以下元素和属性已在上一发行版本中弃用,现已被删除:
-
deadlock-detection-spin
-
兼容性
-
write-skew
-
版本控制
-
data-container
-
驱除
-
eviction-thread-policy
3.1.4. 对 Data Grid 8.2 配置模式的更改
本主题列出了 8.1 和 8.2 之间 Data Grid 配置模式的更改。
修改的元素和属性
-
白名单
更改为allow-list
-
角色
现在是定义的用户角色和安全授权权限的子元素。 -
为自动
SerializationContextInitializer
注册更新了context-initializer
。
如果您的配置不包含context-initializer
元素,则java.util.ServiceLoader
机制会自动发现 classpath 上所有SerializationContextInitializer
实现,并加载它们。 -
对于
indexed-entity
元素,minOccurs
属性的默认值从0
改为1
。
新元素和属性
-
属性添加到
transport
元素中,允许您传递 name/value 传输属性。 -
添加至
security
元素的cache-size
和cache-timeout
属性来配置访问控制列表(ACL)缓存的大小和超时。 -
index-reader
、index-writer
和index-merge
子元素添加到indexing
元素。 -
存储
属性添加到指定索引
存储选项的 indexing 元素中。 -
添加到 indexing 元素中的
path
属性,用于指定索引
使用文件系统存储时的目录。 -
bias-acquisition
属性添加到scattered-cache
元素中,该元素控制节点何时可以在条目上获取 bias。 -
bias-lifespan
属性添加到scattered-cache
元素中,以毫秒为单位指定节点可以保持获取的时间。 -
添加至 backup 元素的
merge-policy
属性指定解析与跨站点复制冲突的算法。 -
模式属性
添加到备份
的state-transfer
子元素中。mode
属性配置手动或自动进行跨站点复制状态传输。 -
INSERT_ABOVE
、INSERT_BEFORE
和INSERT_BELOW
属性添加到stack.combine
属性中,以使用继承扩展 JGroups 堆栈。
弃用的元素和属性
Data Grid 8.2 中没有元素或属性已弃用。
删除的元素和属性
Data Grid 8.2 中不会删除元素或属性。
3.1.5. 对 Data Grid 8.3 配置模式的更改
本主题列出了 8.2 和 8.3 之间 Data Grid 配置模式的更改。
模式更改
-
urn:infinispan:config:store:soft-index
命名空间不再可用。
修改的元素和属性
-
urn:infinispan:config
命名空间中的file-store
元素默认为使用 soft-index 文件缓存存储。 -
single-file-store
元素包含在urn:infinispan:config
命名空间中,但现已弃用。
新元素和属性
-
现在,索引和数据元素可用于配置 Data Grid 如何使用
file-store
元素存储基于文件的缓存存储的索引
和数据
。 -
file-store
元素的open-files-limit
和compaction-threshold
属性。 集群属性
添加到远程站点和
元素中,允许您为跨站点通信定义全局集群名称。远程站点
注意使用集群属性指定的全局
集群名称
必须在所有站点都相同。添加到
metrics
元素中的accurate-size
属性,以启用使用currentNumberOfEntries
统计的数据集的计算。重要从 Data Grid 8.3 开始,
currentNumberOfEntries
统计返回值为 -1,因为它是要执行的昂贵的操作。-
touch
属性添加到expiration
元素中,用于控制在有最大闲置过期状态的集群缓存中更新时间戳的方式。默认值为SYNC
,属性仅适用于使用同步复制的缓存。为使用异步复制的缓存异步更新时间戳。 lifespan
属性添加到用于附加过期值的强
数属性中,以毫秒为单位。默认值为-1,
这意味着强大的一致的计数器永远不会过期。注意强大的
计数器的 lifespan 属性目前作为技术预览提供。
弃用的元素和属性
以下元素和属性现已弃用:
-
single-file-store
元素。 -
file-store
元素的max-entries
和path
属性。
删除的元素和属性
Data Grid 模式中不再提供以下元素和属性:
-
transport
元素的remote-command-executor
属性。 -
distributed-cache
元素的capacity
属性。
3.1.6. 对 Data Grid 8.4 配置模式的更改
本主题列出了 8.3 和 8.4 之间 Data Grid 配置模式的更改。
模式更改
新元素和属性
-
default-max-results
属性添加到query
元素中,允许您限制查询返回的结果数量。适用于索引、非索引和混合查询。 -
startup-mode
属性,允许您定义在缓存启动时数据网格应执行哪些操作。选项会清除
、reindex
、auto
或none
。默认值为none
。 -
Raft-members
属性可让您定义由空格分隔的 raft 成员列表。
弃用的元素和属性
以下元素和属性现已弃用:
-
scattered-cache
元素现已弃用
删除的元素和属性
Data Grid 模式中不再提供以下元素和属性:
-
fetch-state
store 属性不再可用。您可以从 xml 配置中删除属性。
3.1.7. 对 Data Grid 8.5 配置模式的更改
本主题列出了在 8.4 和 8.5 之间对 Data Grid 配置模式的更改。
新元素和属性
-
添加到
cache-container
的追踪
元素可让您配置追踪,并可通过 OpenTelemetry 收集器收集 trace。 -
group-only-mapping
属性添加到授权
中。使用此属性指定principal-to-role 映射
是否仅适用于组主体或用户主体。默认值true
仅将principal-to-role 映射
应用到组主体。将值设为false
以将映射应用到这两个主体类型。 -
在角色
中添加description
属性可让您定义角色的描述。 -
schema-compatibility
属性添加到序列化
中,可让您指定更新模式时执行的兼容性验证。 -
unclean-shutdown-action
属性添加到global-state
,可让您定义在持久全局状态中找到 dangling 锁定文件时执行的操作,表示该节点的未清理关闭。默认值为FAIL
。 -
添加到索引的
index-sharding
元素
。分片是将索引数据拆分为多个较小的索引,称为分片。在处理大量数据时,分片提高了性能。分片默认是禁用的。 -
添加到索引中的
indexing-mode
元素可让您定义如何将缓存操作传播到索引中。默认情况下,对缓存的所有更改都会立即应用到索引中。
-
添加到
索引
中的追踪
元素可让您配置追踪,并可通过 OpenTelemetry 收集器收集 trace。 -
添加到
缓存
的别名
属性,可让您为缓存定义零个或多个别名名称。 -
添加到
缓存的
统计
属性,用于定义缓存是否应该收集统计信息。保持禁用统计数据收集以获得最佳性能。
弃用的元素和属性
这个版本没有弃用。
删除的元素和属性
Data Grid 模式中不再提供以下元素和属性:
-
scattered-cache
元素已被删除。 -
property
元素已从缓存
中删除。 -
auto-config
元素已从索引中删除
。 -
statistics-available
属性已从索引中删除
。 -
connection-interval
属性(如 )从持久性
中删除。
3.2. 驱除配置
与之前的版本相比,数据网格 8 简化了驱除配置。但是,驱除配置在不同的 Data Grid 版本中进行了大量更改,这意味着迁移可能并不简单。
从 Data Grid 7.2 开始,memory
元素替换了配置中的 eviction
元素。本节只使用 memory
元素进行驱除配置。有关迁移使用 eviction
元素的配置的详情,请参考 Data Grid 7.2 文档。
3.2.1. 存储类型
借助 Data Grid,您可以使用以下选项控制如何在内存中存储条目:
- 将对象存储在 JVM 堆内存中。
- 将字节存储在原生内存中(off-heap)。
- 将字节存储在 JVM 堆内存中。
Data Grid 8 的变化
在之前的 7.x 版本和 8.0 中,您可以使用 对象
、二进制
和 off-heap
元素来配置存储类型。
从 Data Grid 8.1 开始,您可以使用 storage
属性将对象存储在 JVM 堆内存中,或者以字节形式存储在非堆内存中。
要将字节存储在 JVM 堆内存中,您可以使用 encoding
元素为您的数据指定二进制存储格式。
Data Grid 7.x | Data Grid 8 |
---|---|
|
|
|
|
|
|
Data Grid 8 中的对象存储
默认情况下,Data Grid 8.1 使用对象存储(JVM 堆):
<distributed-cache> <memory /> </distributed-cache>
您还可以明确配置 storage="HEAP"
以将数据作为对象存储在 JVM 堆内存中:
<distributed-cache> <memory storage="HEAP" /> </distributed-cache>
Data Grid 8 中的现成存储
将 "OFF_HEAP"
设置为 storage
属性的值,以便以字节数形式存储数据:
<distributed-cache> <memory storage="OFF_HEAP" /> </distributed-cache>
off-heap 地址计数
在以前的版本中,offheap
的 address-count
属性允许您指定哈希映射中提供的指针数,以避免冲突。使用 Data Grid 8.1 时,不再使用 address-count
,off-heap 内存会被动态重新使用,以避免冲突。
Data Grid 8 中的二进制存储
使用 encoding
元素为缓存条目指定二进制存储格式:
<distributed-cache> <!--Configure MediaType for entries with binary formats.--> <encoding media-type="application/x-protostream"/> <memory ... /> </distributed-cache>
因此,Data Grid 不再存储原语和字符串与 byte[]
混合,但仅存储 byte[]
。
3.2.2. 驱除阈值
驱除可让 Data Grid 在容器大于配置的阈值时删除条目来控制数据容器的大小。
在 Data Grid 7.x 和 8.0 中,您可以指定两种驱除类型,用于定义缓存中条目的最大限制:
-
COUNT
测量缓存中的条目数。 -
MEMORY
测量缓存中所有条目所占用的内存量。
根据您设置的配置,当计数或内存总量超过最大值时,Data Grid 会移除未使用的条目。
Data Grid 7.x 和 8.0 也使用 size
属性来定义数据容器的大小。根据您配置的存储类型,当条目或内存量超过 size
属性的值时,驱除发生。
使用 Data Grid 8.1 时,size
属性已弃用,以及 COUNT
和 MEMORY
。反之,您可以使用以下两种方式之一配置数据容器的最大大小:
-
带有
max-count
属性的条目总数。 -
使用
max-size
属性的最大内存量(以字节为单位)。
根据条目总数进行驱除
<distributed-cache> <memory max-count="..." /> </distributed-cache>
根据最大内存量进行驱除
<distributed-cache> <memory max-size="..." /> </distributed-cache>
3.2.3. 驱除策略
驱除策略控制数据网格如何执行驱除。
Data Grid 7.x 和 8.0 允许您使用 strategy
属性设置以下驱除策略之一:
策略 | 描述 |
---|---|
| Data Grid 不会驱除条目。这是默认设置,除非您配置驱除。 |
| Data Grid 从内存中删除条目,以便缓存不会超过配置的大小。这是配置驱除时的默认设置。 |
|
Data Grid 不执行驱除。通过从 |
|
如果超过配置的大小,则网格不会将新条目写入缓存。Data Grid 会抛出一个 |
使用 Data Grid 8.1 时,您可以使用与之前版本相同的策略。但是,policy
属性被 when-full
属性替代。
<distributed-cache> <memory when-full="<eviction_strategy>" /> </distributed-cache>
驱除算法
使用 Data Grid 7.2 时,配置驱除算法的功能已弃用,以及 Low Inter-Reference Recency Set (LIRS)。
从版本 7.2 开始,Data Grid 包括 Caffeine 缓存库,它实现了 Least Frequently Used (LFU)缓存替换算法的变化,称为 TinyLFU。对于非堆存储,Data Grid 使用 Least Recently Used (LRU)算法的自定义实现。
3.2.4. 驱除配置比较
比较不同 Data Grid 版本之间的驱除配置。
对象存储并驱除条目数
7.2 到 8.0
<memory> <object size="1000000" eviction="COUNT" strategy="REMOVE"/> </memory>
8.1
<memory max-count="1MB" when-full="REMOVE"/>
对象存储并驱除内存量
7.2 到 8.0
<memory> <object size="1000000" eviction="MEMORY" strategy="MANUAL"/> </memory>
8.1
<memory max-size="1MB" when-full="MANUAL"/>
二进制存储和驱除条目数
7.2 到 8.0
<memory> <binary size="500000000" eviction="MEMORY" strategy="EXCEPTION"/> </memory>
8.1
<cache> <encoding media-type="application/x-protostream"/> <memory max-size="500 MB" when-full="EXCEPTION"/> </cache>
二进制存储和驱除内存量
7.2 到 8.0
<memory> <binary size="500000000" eviction="COUNT" strategy="MANUAL"/> </memory>
8.1
<memory max-count="500 MB" when-full="MANUAL"/>
非堆存储并驱除条目数
7.2 到 8.0
<memory> <off-heap size="10000000" eviction="COUNT"/> </memory>
8.1
<memory storage="OFF_HEAP" max-count="10MB"/>
非堆存储并驱除内存量
7.2 到 8.0
<memory> <off-heap size="1000000000" eviction="MEMORY"/> </memory>
8.1
<memory storage="OFF_HEAP" max-size="1GB"/>
3.3. 过期配置
过期会根据它们的寿命或最大闲置时间从缓存中删除条目。
将配置从 Data Grid 7.x 迁移到 8 时,您不需要在过期时进行任何更改。配置保持不变:
lifespan 过期
<expiration lifespan="1000" />
max-idle 过期
<expiration max-idle="1000" interval="120000" />
对于 Data Grid 7.2 及更早版本,使用带有集群缓存的 max-idle
有技术限制,从而导致性能下降。
从 Data Grid 7.3 开始,当客户端读取具有 max-idle
过期值的条目时,Data Grid 会将 touch 命令发送到集群缓存中的所有所有者。这样可确保条目在集群中具有相同的相对访问时间。
Data Grid 8 会发送相同的 touch 命令,用于跨集群的 max-idle
过期。但是,在使用 max-idle
前,您应该考虑一些技术注意事项。请参阅 配置数据网格缓存,以了解更多有关过期时间如何工作的信息,并查看 touch 命令如何使用集群缓存影响性能。
其他资源
3.4. 持久性缓存存储
与 Data Grid 7.x 相比,在 Data Grid 8 中对缓存存储配置有一些更改。
Persistence SPI
Data Grid 8.1 引入了用于缓存存储的 NonBlockingStore
接口。NonBlockingStore
SPI 公开不得阻止调用线程的方法。
将 Data Grid 连接到持久数据源的缓存存储实现了 NonBlockingStore
接口。
对于使用阻塞操作的自定义缓存存储实现,Data Grid 提供了一个 BlockingManager
工具类来处理这些操作。
引入 NonBlockingStore
接口弃用了以下接口:
-
CacheLoader
-
CacheWriter
-
AdvancedCacheLoader
-
AdvancedCacheWriter
自定义缓存存储
Data Grid 8 可让您像之前的版本一样使用 store
元素配置自定义缓存存储。
有以下更改适用:
-
删除了
singleton
属性。改为使用shared=true
。 -
添加
segmented
属性,默认为true
。
分段缓存存储
从 Data Grid 8 开始,缓存存储配置默认为 segmented="true"
,并应用到以下缓存存储元素:
-
store
-
file-store
-
string-keyed-jdbc-store
-
jpa-store
-
remote-store
-
rocksdb-store
-
soft-index-file-store
从 Data Grid 8.3 开始,缓存配置中的 file-store
元素会创建一个基于软索引文件的存储。如需更多信息,请参阅 基于文件的缓存默认到软索引。
单个文件缓存存储
Data Grid 8 中删除了单文件缓存存储的 relative-to
属性。如果您的缓存存储配置包含此属性,Data Grid 会忽略它,并仅使用 path
属性来配置存储位置。
JDBC 缓存存储
JDBC 缓存存储必须包含 xlmns
命名空间声明,在某些 Data Grid 7.x 版本中不需要该声明。
<persistence> <string-keyed-jdbc-store xmlns="urn:infinispan:config:store:jdbc:15.0" shared="true"> ... </persistence>
JDBC 连接工厂
Data Grid 7.x JDBC 缓存存储可使用以下 ConnectionFactory
实现来获取数据库连接:
-
ManagedConnectionFactory
-
SimpleConnectionFactory
-
PooledConnectionFactory
Data Grid 8 现在使用基于 Agroal (与 Red Hat JBoss EAP 相同)的连接工厂来连接数据库。不再可以使用 c3p0.properties
和 hikari.properties
文件。
自 Data Grid 8.3 JDBC 连接工厂起,是 org.infinispan.persistence.jdbc.common.configuration
软件包的一部分。
分段
基于 JDBC 字符串的缓存存储配置,其现在为分段(现在是默认设置),必须包含 segmentColumnName
和 segmentColumnType
参数,如下例所示:
MySQL 示例
builder.table() .tableNamePrefix("ISPN") .idColumnName("ID_COLUMN").idColumnType(“VARCHAR(255)”) .dataColumnName("DATA_COLUMN").dataColumnType(“VARBINARY(1000)”) .timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType(“BIGINT”) .segmentColumnName("SEGMENT_COLUMN").segmentColumnType("INTEGER")
PostgreSQL 示例
builder.table() .tableNamePrefix("ISPN") .idColumnName("ID_COLUMN").idColumnType(“VARCHAR(255)”) .dataColumnName("DATA_COLUMN").dataColumnType(“BYTEA”) .timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT”) .segmentColumnName("SEGMENT_COLUMN").segmentColumnType("INTEGER");
write-behind
Write-Behind 模式的 thread-pool-size
属性已在 Data Grid 8 中删除。
删除了缓存存储和加载程序
Data Grid 7.3 弃用了在 Data Grid 8 中不再提供以下缓存存储和加载程序:
- Cassandra Cache Store
- REST Cache Store
- LevelDB Cache Store
- CLI Cache Loader
缓存存储 migrator
缓存以与 Data Grid 8 不兼容的二进制格式存储数据。
使用 StoreMigrator
实用程序将持久缓存存储中的数据迁移到 Data Grid 8。
3.4.1. 基于文件的缓存默认存储到软索引
在缓存配置中包含 file-store
persistence 现在会创建一个基于软索引文件的缓存存储 SoftIndexFileStore
,而不是单个文件缓存存储 SingleFileStore
。在 Data Grid 8.2 及更早版本中,SingleFileStore
是基于文件的缓存存储的默认设置。
如果您要迁移或升级到 Data Grid 8.3,则 任何文件
存储配置都会在服务器启动时自动转换为 SoftIndexFileStore
。当您的配置转换为 SoftIndexFileStore
时,在没有修改配置以确保与新存储兼容的情况下无法恢复到 SingleFileStore
。
3.4.1.1. 声明性配置
Data Grid 8.2 及更早版本
<persistence> <soft-index-file-store xmlns="urn:infinispan:config:soft-index:12.1"> <index path="testCache/index" /> <data path="testCache/data" /> </soft-index-file-store> </persistence>
Data Grid 8.3 及更新的版本
<persistence> <file-store> <index path="testCache/index" /> <data path="testCache/data" /> </file-store> </persistence>
3.4.1.2. 编程配置
Data Grid 8.2 及更早版本
ConfigurationBuilder b = new ConfigurationBuilder(); b.persistence() .addStore(SoftIndexFileStoreConfigurationBuilder.class) .indexLocation("testCache/index"); .dataLocation("testCache/data")
Data Grid 8.3 及更新的版本
ConfigurationBuilder b = new ConfigurationBuilder(); b.persistence() .addSoftIndexFileStore() .indexLocation("testCache/index") .dataLocation("testCache/data");
3.4.1.3. 使用带有 Data Grid 8.3 的单个文件缓存存储
您可以使用 Data Grid 8.3 或更高版本配置 SingleFileStore
缓存存储,但红帽不推荐这样做。您应该使用 SoftIndexFileStore
缓存存储,因为它们提供更好的可扩展性。
声明
<persistence passivation="false"> <single-file-store shared="false" preload="true" fetch-state="true" read-only="false"/> </persistence>
programmatic
ConfigurationBuilder b = new ConfigurationBuilder(); b.persistence() .addSingleFileStore();
3.5. Data Grid 集群传输
Data Grid 使用 JGroups 技术来处理集群节点之间的通信。
JGroups 堆栈配置元素和属性与之前的数据网格版本没有显著更改。
与之前的版本一样,Data Grid 提供预配置的 JGroups 堆栈,可用作构建针对网络要求自定义集群传输配置的起点。同样,Data Grid 提供了将外部 XML 文件中定义的 JGroups 堆栈添加到 infinispan.xml
的功能。
Data Grid 8 提高了可用性,以便更轻松地进行集群传输配置:
-
内联堆栈允许您使用
jgroups
元素直接在infinispan.xml
中配置 JGroups 堆栈。 -
在
infinispan.xml
中声明 JGroups 模式。 - 预配置的 JGroups 堆栈,适用于 UDP 和 TCP 协议。
- 继承属性,允许您扩展 JGroups 堆栈来调整特定的协议和属性。
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:15.0 https://infinispan.org/schemas/infinispan-config-15.0.xsd urn:infinispan:server:15.0 https://infinispan.org/schemas/infinispan-server-15.0.xsd urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.2.xsd" 1 xmlns="urn:infinispan:config:15.0" xmlns:server="urn:infinispan:server:15.0"> <jgroups> 2 <stack name="xsite" extends="udp"> 3 <relay.RELAY2 site="LON" xmlns="urn:org:jgroups"/> <remote-sites default-stack="tcp"> <remote-site name="LON"/> <remote-site name="NYC"/> </remote-sites> </stack> </jgroups> <cache-container ...> ... </infinispan>
3.5.1. 传输安全性
如之前的版本,Data Grid 8 使用 JGroups SYM_ENCRYPT 和 ASYM_ENCRYPT 协议来加密集群通信。
从 Data Grid 开始,您还可以使用包含密钥存储和信任存储作为 TLS 服务器身份的安全域,以保护集群传输,例如:
<cache-container> <transport server:security-realm="tls-transport"/> </cache-container>
节点身份验证
在 Data Grid 7.x 中,JGroups SASL 协议可让节点对嵌入式和远程服务器安装中的安全域进行身份验证。
从 Data Grid 8 开始,无法针对安全域配置节点身份验证。同样,Data Grid 8 不推荐使用 JGroups AUTH 协议来验证集群节点。
但是,对于嵌入式 Data Grid 安装,JGroups 集群传输包含 SASL 配置,作为 jgroups
元素的一部分。与之前的版本一样,SASL 配置依赖于 JAAS 的概念,如 CallbackHandlers
,以获取节点身份验证所需的某些信息。
3.5.2. 重新传输请求
Data Grid 8.2 更改默认 JGroups 堆栈中为 UNICAST3 和 NAKACK2 协议重新传输请求的配置,如下所示:
-
xmit_interval
属性的值从 100 毫秒增加到 200 毫秒。 -
max_xmit_req_size
属性现在为每个重新传输请求设置最多 500 个消息,而不是最多使用 TCP 的 UDP 或 64000 的 8500 个消息。
作为迁移到 Data Grid 8 的一部分,您应该调整任何自定义 JGroups 堆栈配置,以使用这些推荐的设置。
3.6. Data Grid authorization
Data Grid 使用基于角色的访问控制(RBAC)来限制对数据和集群加密的访问,以保护节点之间的通信。
角色和权限
Data Grid 8.2 提供了一组默认用户和权限,可用于 RBAC,包括以下更改:
-
ClusterRoleMapper
是 Data Grid 用来将安全主体与授权角色关联的默认机制。 -
新的
MONITOR
权限允许用户访问 Data Grid 统计数据。 用户需要创建和删除缓存和计数器等资源的新
CREATE
权限。注意CREATE
取代了___schema_manager
和\___script_manager
角色,用户在 Data Grid 8.1 及更早版本中创建和删除 Protobuf 模式和服务器脚本。迁移到 Data Grid 8.2 时,您应该为在 Data Grid 8.1 或更早版本中有
___schema_manager
和\___script_manager
角色的用户分配deployer
角色。使用命令行界面(CLI),如下所示:[//containers/default]> user roles grant --roles=deployer <user>
缓存管理器权限
权限 | 功能 | 描述 |
---|---|---|
配置 |
| 定义新的缓存配置。 |
LISTEN |
| 针对缓存管理器注册监听程序。 |
生命周期 |
| 停止缓存管理器。 |
ALL | - | 包括所有缓存管理器权限。 |
权限 | 功能 | 描述 |
---|---|---|
配置 |
| 定义新的缓存配置。 |
LISTEN |
| 针对缓存管理器注册监听程序。 |
生命周期 |
| 停止缓存管理器。 |
CREATE |
| 创建和删除容器资源,如缓存、计数器、模式和脚本。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存管理器权限。 |
缓存权限
权限 | 功能 | 描述 |
---|---|---|
|
| 从缓存检索条目。 |
写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
EXEC |
| 允许针对缓存执行代码。 |
LISTEN |
| 针对缓存注册监听程序。 |
BULK_READ |
| 执行批量检索操作。 |
BULK_WRITE |
| 执行批量写入操作。 |
生命周期 |
| 启动和停止缓存。 |
ADMIN |
| 允许访问底层组件和内部结构。 |
ALL | - | 包括所有缓存权限。 |
ALL_READ | - | 组合了 READ 和 BULK_READ 权限。 |
ALL_WRITE | - | 组合 WRITE 和 BULK_WRITE 权限。 |
权限 | 功能 | 描述 |
---|---|---|
READ |
| 从缓存检索条目。 |
写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
EXEC |
| 允许针对缓存执行代码。 |
LISTEN |
| 针对缓存注册监听程序。 |
BULK_READ |
| 执行批量检索操作。 |
BULK_WRITE |
| 执行批量写入操作。 |
生命周期 |
| 启动和停止缓存。 |
ADMIN |
| 允许访问底层组件和内部结构。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存权限。 |
ALL_READ | - | 组合了 READ 和 BULK_READ 权限。 |
ALL_WRITE | - | 组合 WRITE 和 BULK_WRITE 权限。 |
缓存管理器授权
从 Data Grid 8.2 开始,您可以在 cache-container
安全配置中包含 authorization
元素,如下所示:
<infinispan>
<cache-container name="secured">
<security>
<authorization/> 1
</security>
</cache-container>
</infinispan>
- 1
- 为具有默认角色和权限的缓存管理器启用安全授权。
您还可以定义全局授权配置,如下所示:
<infinispan> <cache-container default-cache="secured" name="secured"> <security> <authorization> 1 <identity-role-mapper /> 2 <role name="admin" permissions="ALL" /> 3 <role name="reader" permissions="READ" /> <role name="writer" permissions="WRITE" /> <role name="supervisor" permissions="READ WRITE EXEC"/> </authorization> </security> </cache-container> </infinispan>
隐式缓存授权
Data Grid 8 允许缓存从 cache-container
继承授权配置来提高可用性,因此您不需要为每个缓存显式配置角色和权限。
<local-cache name="secured">
<security>
<authorization/> 1
</security>
</local-cache>
- 1
- 使用缓存容器中定义的角色和权限。
从 Data Grid 8.2 开始,包括配置中的
authorization
元素使用默认角色和权限限制对该缓存的访问,除非您定义了一组自定义全局权限。
其他资源
第 4 章 迁移到 Data Grid 8 API
查找影响迁移到 Data Grid 8 的 Data Grid API 的更改。
API 弃用和删除
除了本节详情外,您还应查看 API 弃用和删除。
请参阅 Data Grid 已弃用的功能和功能 (红帽知识库)。
4.1. REST API
Data Grid 7.x 使用 REST API v1,它被 Data Grid 8 中的 REST API v2 替换。
REST API v2 的默认上下文路径为 < server_hostname>:11222/rest/v2/
。您必须更新任何客户端或脚本以使用 REST API v2。
performAsync
标头也从 REST 端点中删除。使用 REST 端点执行 async 操作的客户端应管理其端的请求和响应,以避免阻断。
现在,如果请求没有返回资源,REST 操作 PUT
、POST
和 DELETE
方法现在返回状态 204
(No content),而不是 200
。
其他资源
4.1.1. 8.3 中的 REST API 更改
Data Grid 8.3 包括对 REST API 的以下更改:
重新索引缓存
用于重新索引数据网格缓存的 mass-index
操作现已弃用。更新您的客户端以使用 reindex
,如下例所示:
/v2/caches/<cacheName>/search/indexes?action=reindex
滚动升级操作
以下操作现已弃用:
POST /v2/caches/<cacheName>?action=disconnect-source
使用 source-connection
操作替代:
DELETE /v2/caches/<cacheName>/rolling-upgrade/source-connection
4.2. 查询 API
Data Grid 8 引入了一个更新的 Query API,它更易于使用,并具有更轻量的设计。与 Data Grid 7.x 相比,在分布式缓存中的值中搜索时,您可以获得更高效的查询性能。
因为 Data Grid 8 Query API 已通过可重构,所以有几个功能和功能资源现已弃用。
本节重点介绍从以前的版本迁移时您需要对配置进行的更改。这些更改应包括计划删除所有已弃用的接口、方法或其他配置。
有关已弃用的功能 和功能的完整列表,请参阅 Data Grid Deprecations 和 Removals (红帽知识库)。
索引数据网格缓存
Data Grid Lucene Directory、InfinispanIndexManager
和 AffinityIndexManager
索引管理器以及 Hibernate Search 的 Infinispan Directory 供应商在 8.0 中被弃用,并在 8.1 中删除。
auto-config
属性在 8.1 中弃用,并计划删除。
配置索引模式配置的 index ()
方法已弃用。当您在配置中启用索引时,Data Grid 会自动选择管理索引的最佳方法。
不再支持几个索引配置值,如果包含它们,则会导致严重配置错误。
您应该对配置进行以下更改:
-
将
.indexing ().index (Index.NONE)
更改为indexing ().enabled (false)
-
按如下方式更改所有其他枚举值:index
ing ().enabled (true)
声明性地,如果您的配置包含其他索引配置元素,则不需要指定 enabled="true"。
但是,如果您以编程方式配置索引,则必须调用 enabled ()
方法。同样,JSON 格式的 Data Grid 配置必须明确启用索引,例如:
"indexing": { "enabled": "true" ... },
索引类型
当未拒绝类型与索引缓存一起使用时,您必须在索引配置中声明所有索引类型,或者 Data Grid 会记录警告信息。此要求适用于 Java 类和 Protobuf 类型。
在 Data Grid 8 中启用索引
声明性
<distributed-cache name="my-cache"> <indexing> <indexed-entities> <indexed-entity>com.acme.query.test.Car</indexed-entity> <indexed-entity>com.acme.query.test.Truck</indexed-entity> </indexed-entities> </indexing> </distributed-cache>
以编程方式
import org.infinispan.configuration.cache.*; ConfigurationBuilder config=new ConfigurationBuilder(); config.indexing().enable().addIndexedEntity(Car.class).addIndexedEntity(Truck.class);
在缓存中查询值
org.infinispan.query.SearchManager
接口在 Data Grid 8 中已弃用,不再支持 Lucene 和 Hibernate Search native 对象。
删除的方法
使用 Lucene Queries 的
.getQuery ()
方法。改为使用来自org.infinispan.query.Search
入口点的 Ickle 查询的替代方法。同样,在调用
.getQuery ()
时无法再指定多个目标实体类。Ickle 查询字符串提供实体。-
.buildQueryBuilderForClass ()
,直接构建 Hibernate Search 查询。改为使用 Ickle 查询。
org.infinispan.query.CacheQuery
接口也被弃用。您应该从 Search.getQueryFactory ()
方法获取 org.infinispan.query.dsl.Query
接口。
请注意,org.infinispan.query.dsl.Query
的实例不再缓存查询结果,并允许在调用 list ()
等方法时重新执行查询。
实体映射
现在,所有情况下都必须注解需要 @SortableField
排序的字段。
4.2.1. 查询 8.2 中的 API 更改
Data Grid 升级 Hibernate 和 Apache Lucene 库,以提高 Query API 的性能和功能。作为此升级的一部分,Data Grid 引入了新的索引功能,并删除几个 Hibernate 和 Lucene 注解。
查询统计信息
只有在缓存配置中以声明性方式启用统计时,Data Grid 8.2 才会公开查询和索引的统计信息,如下所示:
<replicated-cache name="myReplicatedCache" statistics="true"> <!-- Cache configuration goes here. --> </replicated-cache>
不再通过 JMX 启用查询和索引统计信息。
索引数据网格缓存
声明索引类型
Data Grid 8.1 允许在索引配置中取消拒绝类型。从 Data Grid 8.2 开始,您必须在配置中声明所有索引类型。此要求适用于 Java 类和 Protobuf 类型。有关声明索引类型的更多信息,请参阅 8.1 迁移详情。
索引管理器
Data Grid 8.2 使用 near-real-time
作为默认索引管理器,不再需要配置。
Data Grid 8.1:
<indexing> <property name="default.indexmanager">near-real-time</property> </indexing>
Data Grid 8.2:
<indexing enabled="true"/>
索引读者和写器
Data Grid 8.2 引入了索引读取器和索引写入器,两者都是用于创建索引的内部组件。
要适应您的配置,您应该:
-
删除使用
property
元素或.addProperty ()
方法的索引配置。 使用以下方法之一配置索引行为:
-
声明:添加 <
index-reader> 和 &
lt;index-writer>
元素。 -
编程方式:添加
builder.indexing ().reader ()
和builder.indexing ().writer ()
方法。
-
声明:添加 <
读取器刷新
使用 8.2 中添加的 refresh-interval
属性为索引读取器配置刷新周期。
Data Grid 8.1:
<indexing> <property name="default.reader.async_refresh_period_ms">1000</property> </indexing>
Data Grid 8.2:
<indexing> <index-reader refresh-interval="1000"/> </indexing>
writer 提交间隔
使用 8.2 中添加的 commit-interval
属性来配置索引写入器提交的时间间隔。在 Data Grid 8.2 索引中,默认是异步的,default.worker.execution
属性不再使用。
Data Grid 8.1:
<indexing> <property name="default.worker.execution">async</property> <property name="default.index_flush_interval">500</property> </indexing>
Data Grid 8.2:
<indexing> <index-writer commit-interval="500"/> </indexing>
Lucene 索引调整属性
Data Grid 8.2 添加 ram-buffer-size
属性和 index-merge
元素,带有替换调优索引的属性的 factor
和 max-size
属性。
Data Grid 8.1:
<indexing> <property name="default.indexwriter.merge_factor">30</property> <property name="default.indexwriter.merge_max_size">1024</property> <property name="default.indexwriter.ram_buffer_size">256</property> </indexing>
Data Grid 8.2:
<indexing> <index-writer ram-buffer-size="256"> <index-merge factor="30" max-size="1024"/> </index-writer> </indexing>
索引存储
Data Grid 8.2 包含一个 storage
属性,它替换之前版本中的 property
元素配置。storage
属性允许您配置是否将索引存储在 JVM 堆或主机文件系统中。
文件系统存储
Data Grid 8.1:
<indexing> <property name="default.directory_provider">filesystem</property> <property name="default.indexBase">${java.io.tmpdir}/baseDir</property> </indexing>
Data Grid 8.2:
<indexing storage="filesystem" path="${java.io.tmpdir}/baseDir"/>
JVM 堆存储
Data Grid 8.1:
<indexing> <property name="default.directory_provider">local-heap</property> </indexing>
Data Grid 8.2:
<indexing storage="local-heap"> </indexing>
调整索引属性
将索引配置迁移到 Data Grid 8.2 时,您还应进行以下更改:
删除
lucene_version
属性。重要不要使用您使用带有 Data Grid 8.2 的旧 Lucene 版本创建的索引。
在调整索引配置后,您应该在第一次启动 Data Grid 时重建索引,以完成迁移到 Data Grid 8.2。
-
删除
default.sharding_strategy.nbr_of_shards
属性。
此属性在没有替换的情况下已弃用。 -
删除
infinispan.query.lucene.max-boolean-clauses
属性。
从 Data Grid 8.2 开始,您应该将其设置为 JVM 属性。
Hibernate 和 Lucene 注解
有关迁移 Hibernate 和 Lucene 注解的信息,如 @Field
、@Indexed
、@SortableField
等等,请参阅 Hibernate Search Migration Guide 的 Annotation mapping 部分。
4.2.2. 在 8.3 中查询 API 更改
Data Grid 8.3 删除 IndexedQueryMode
参数。Data Grid 会自动检测查询缓存的最佳模式,并在早期版本中忽略此可选参数。
4.2.3. 查询 8.4 中的 API 更改
Data Grid 原生注解
Data Grid 8.4 引入了新的索引注解:@ Indexed ,
,@
Basic@Decimal
,@Keyword
,@Text
, 和 @Embedded
.每个注解都支持一组属性,可用于进一步描述实体的索引方式。
这些新注解替换了 Hibernate Search 注解,这意味着您不再需要使用 @ProtoDoc 注解来给 Java 类添加远程缓存的 @ProtoDoc
注释。所有注解都作为注释复制到生成的 .proto
文件中。
下表总结了 Hibernate Search 5 (HS5)注解和 Data Grid 原生注解之间的字段映射:
HS5 注解 | 索引属性 | Data Grid 原生注解 | 描述 |
---|---|---|---|
@Field(index=Index.YES) | 可搜索 | @basic, @Decimal, @Keyword, @Text | 之前标记为索引的字段现在是可搜索的。 |
@Field(store = Store.YES) | projectable = true | @basic, @Decimal, @Keyword, @Text | 以前标记为 storage 的字段现在可以被项目处理。 |
输入 String && @Field (analyze = Analyze.YES) | analyzer = "<definition>" | @Text | 在索引过程中,带有分析器定义标记的字符串字段仍然会被分析。 |
@Field(analyze = Analyze.NO) && (@Field(store = Store.YES) OR @Field(sortable = Sortable.YES)) | sortable = true | @basic, @Decimal, @Keyword | 没有分析但存储在索引中的字段或标记为可排序的字段现在可以排序。 |
N/A | aggregable = true | @basic, @Decimal, @Keyword | 无法使用 Hibernate Search 5 注解执行聚合操作。 |
N/A | normalizer = "lowercase" | @Keyword | 因为过程中潜在的数据丢失,无法映射分析或规范化的字段。 |
查询效率
您可以使用 default-max-results
缓存属性限制查询实例返回的结果数量。default-max-results
的默认值为 100。限制查询返回的结果数量可显著提高没有显式限制的查询的性能。
第 5 章 将应用程序迁移到 Data Grid 8
5.1. Data Grid 8 中的 Marshalling
Marshalling 功能在 Data Grid 8 中被显著重构,以隔离内部对象和用户对象。
因为 Data Grid 现在处理内部类的划分,所以在使用嵌入式或远程缓存配置 marshallers 时,不再需要处理这些内部类。
5.1.1. ProtoStream marshalling
默认情况下,Data Grid 8 使用 ProtoStream API 将所有数据作为协议缓冲区(一种语言中立且向后兼容的格式)。
protobuf 编码是一种模式定义格式,现在是许多应用程序的默认标准,与 JBoss Marshalling 相比,转码数据时具有更大的灵活性,这是 Data Grid 7 中的默认设置。
因为 ProtoStream marshaller 基于 Protobuf 格式,所以数据网格可以在不先转换为 Java 对象的情况下转换为其他编码。使用 JBoss Marshalling 时,需要在转换为任何其他格式前将键和值转换为 Java 对象。
作为迁移到 Data Grid 8 的一部分,您应该为您的 Java 类使用 ProtoStream marshalling。
在高级别中,要使用 ProtoStream marshaller,您可以使用 ProtoStream 处理器生成 SerializationContextInitializer
实现。首先,您可以在 Java 类中添加 @Proto
注解,然后使用 Data Grid 提供的 ProtoStream 处理器来生成包含以下内容的序列化上下文:
-
.proto
模式,提供 Java 对象的结构化表示,作为 Protobuf 消息类型。 - Marshaller 实现将 Java 对象编码为 Protobuf 格式。
根据您使用的嵌入式还是远程缓存,Data Grid 可以自动注册 SerializationContextInitializer
实现。
嵌套 ProtoStream 注解
Data Grid 8.2 升级到 ProtoStream 4.4.0.Final,这在某些情况下需要迁移。
在以前的版本中,ProtoStream API 没有正确地嵌套消息类型,从而导致消息只生成顶层。
如果您在持久缓存存储中有 Protobuf 编码的条目,您应该修改 Java 类,以便 ProtoStream 注解位于顶级。这样可确保您的持久消息嵌套与 Java 类中的嵌套匹配,否则可能会出现数据不兼容的问题。
例如,如果您有嵌套的 Java 类,如下所示:
class OuterClass { class InnerClass { @ProtoField(1) int someMethod() { } } }
您应该调整类,以便 InnerClass
不再是 OuterClass
的子级:
class InnerClass { @ProtoField(1) int someMethod() { } }
Data Grid Server 的 Marshalling
您应该只对远程缓存使用 Protobuf 编码,并将 ProtoStream marshaller 用于任何自定义类型。
其他 marshaller 实现(如 JBoss marshalling)需要您使用与 Data Grid CLI、Data Grid Console 或 Ickle 查询不兼容的不同缓存编码。
缓存存储和 ProtoStream
在 Data Grid 7.x 中,您保留至缓存存储的数据与 Data Grid 8 中的 ProtoStream marshaller 不兼容。您必须使用 StoreMigrator
工具将数据从任何 Data Grid 7.x 缓存存储迁移到 Data Grid 8 缓存存储。
5.1.2. 备用 marshaller 实现
Data Grid 提供替代的 marshaller 实现,到 ProtoStream 有助于简化从旧版本进行迁移。在迁移到 ProtoStream marshalling 时,您应该只使用这些替代的 marshallers 作为中间解决方案。
对于新项目,红帽强烈建议您只使用 ProtoStream marshalling 以避免将来升级或迁移出现任何问题。
deserialization Allow List
红帽承诺使用包含的语言,术语"white list"已更改为"允许列表",用于配置 Java 类的序列化。
Data Grid 8.1
<cache-container> <serialization> <white-list> <class>org.infinispan.test.data.Person</class> <regex>org.infinispan.test.data.*</regex> </white-list> </serialization> </cache-container>
Data Grid 8.2
<cache-container> <serialization> <allow-list> <class>org.infinispan.test.data.Person</class> <regex>org.infinispan.test.data.*</regex> </allow-list> </serialization> </cache-container>
JBoss marshalling
在 Data Grid 7 中,JBoss Marshalling 是默认的 marshaller。在 Data Grid 8 中,ProtoStream marshalling 是默认值。
如果您有客户端需要使用 Java 序列化要求,您应该使用 JavaSerializationMarshaller
而不是 JBoss Marshalling。
如果需要在迁移到 Data Grid 8 的过程中使用 JBoss Marshalling 作为临时解决方案,请执行以下操作:
嵌入式缓存
-
将
infinispan-jboss-marshalling
依赖项添加到您的 classpath。 将 Data Grid 配置为使用
JBossUserMarshaller
,例如:<serialization marshaller="org.infinispan.jboss.marshalling.core.JBossUserMarshaller"/>
- 将您的类添加到 Data Grid 允许进行序列化的类列表中。
远程缓存
如果 infinispan-jboss-marshalling
模块位于 classpath 上,则数据网格服务器不支持 JBoss Marshalling,并且 GenericJBossMarshaller
不再被自动配置。
您必须将 Hot Rod Java 客户端配置为使用 JBoss Marshalling,如下所示:
RemoteCacheManager
.marshaller("org.infinispan.jboss.marshalling.commons.GenericJBossMarshaller");
hotrod-client.properties
infinispan.client.hotrod.marshaller = GenericJBossMarshaller
其他资源
5.2. 将应用程序迁移到 AutoProtoSchemaBuilder 注解
之前的 Data Grid 版本使用 ProtoStream API 中的 MessageMarshaller
接口来配置 marshalling。
MessageMarshaller
API 和 ProtoSchemaBuilder
注解都从 Data Grid 8.1.1 中弃用,它对应于 ProtoStream 4.3.4。
使用 MessageMarshaller
接口涉及:
- 手动创建 Protobuf 模式。
-
将
ProtoSchemaBuilder
注释添加到 Java 类,然后生成 Protobuf 模式。
但是,配置 ProtoStream marshalling 的这些技术不作为 AutoProtoSchemaBuilder
注释(可从 Data Grid 81 开始获得)。只需在您的 Java 类中添加 AutoProtoSchemaBuilder
注释,并生成包含 Protobuf 模式和相关 marshallers 的 SerializationContextInitializer
实现。
红帽建议您开始使用 AutoProtoSchemaBuilder
注解从 ProtoStream marshaller 获取最佳结果。
以下代码示例演示了如何将应用从 MessageMarshaller
API 迁移到 AutoProtoSchemaBuilder
注释。
5.2.1. 基本 MessageMarshaller 实现
这个示例包含使用非默认类型的一些字段。text
字段有不同的顺序,固定32
字段与生成的 Protobuf 模式类型冲突,因为代码生成器默认使用 int
类型。
SimpleEntry.java
public class SimpleEntry { private String description; private Collection<String> text; private int intDefault; private Integer fixed32; // public Getter, Setter, equals and HashCode methods omitted for brevity }
SimpleEntryMarshaller.java
import org.infinispan.protostream.MessageMarshaller; public class SimpleEntryMarshaller implements MessageMarshaller<SimpleEntry> { @Override public void writeTo(ProtoStreamWriter writer, SimpleEntry testEntry) throws IOException { writer.writeString("description", testEntry.getDescription()); writer.writeInt("intDefault", testEntry.getIntDefault()); writer.writeInt("fix32", testEntry.getFixed32()); writer.writeCollection("text", testEntry.getText(), String.class); } @Override public SimpleEntry readFrom(MessageMarshaller.ProtoStreamReader reader) throws IOException { SimpleEntry x = new SimpleEntry(); x.setDescription(reader.readString("description")); x.setIntDefault(reader.readInt("intDefault")); x.setFixed32(reader.readInt("fix32")); x.setText(reader.readCollection("text", new LinkedList<String>(), String.class)); return x; } }
生成的 Protobuf 模式
syntax = "proto2"; package example; message SimpleEntry { required string description = 1; optional int32 intDefault = 2; optional fixed32 fix32 = 3; repeated string text = 4; }
迁移到 AutoProtoSchemaBuilder 注解
SimpleEntry.java
import org.infinispan.protostream.annotations.ProtoField; import org.infinispan.protostream.descriptors.Type; public class SimpleEntry { private String description; private Collection<String> text; private int intDefault; private Integer fixed32; @ProtoField(number = 1) public String getDescription() {...} @ProtoField(number = 4, collectionImplementation = LinkedList.class) public Collection<String> getText() {...} @ProtoField(number = 2, defaultValue = "0") public int getIntDefault() {...} @ProtoField(number = 3, type = Type.FIXED32) public Integer getFixed32() {...} // public Getter, Setter, equals and HashCode methods and convenient constructors omitted for brevity }
SimpleEntryInitializer.java
import org.infinispan.protostream.GeneratedSchema; import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; @AutoProtoSchemaBuilder(includeClasses = { SimpleEntry.class }, schemaFileName = "simple.proto", schemaFilePath = "proto", schemaPackageName = "example") public interface SimpleEntryInitializer extends GeneratedSchema { }
重要观察
-
字段 2 定义为
int
,之前版本中的 ProtoStream marshaller 没有检查。 因为 Java
int
字段不可为空,因此 ProtoStream 处理器将失败。
必须需要
Javaint
字段,或使用defaultValue
进行初始化。从 Java 应用程序的角度来看,
int
字段使用 "0" 初始化,因此您可以使用defaultValue
,而不影响任何 put 操作会设置它。如果始终存在数据视角,则更改为必需
不是问题,但可能会导致不同的客户端出现问题。-
为了兼容性,字段 3 必须明确设置为
Type.FIXED32
。 - 对于生成的 Protobuf 模式,必须以正确的顺序设置 文本集合。
Protobuf 模式中的 文本集合 顺序必须与迁移之前和之后相同。同样,您必须在迁移过程中设置 fixed32
类型。
如果没有,客户端应用程序可能会抛出以下异常,且无法启动:
Exception ( ISPN004034: Unable to unmarshall bytes )
在其他情况下,您可能会观察缓存的数据不完整或不准确。
5.2.2. 带有自定义类型的 MessageMarshaller 实现
本节提供了 MessageMarshaller
实现迁移示例,其中包含 ProtoStream 没有原生处理的字段。
以下示例使用 BigInteger
类,但适用于任何类,即使是数据网格适配器或自定义类。
BigInteger
类不可变,因此没有参数结构。
CustomTypeEntry.java
import java.math.BigInteger; public class CustomTypeEntry { final String description; final BigInteger bigInt; // public Getter, Setter, equals and HashCode methods and convenient constructors omitted for brevity }
CustomTypeEntryMarshaller.java
import org.infinispan.protostream.MessageMarshaller; public class CustomTypeEntryMarshaller implements MessageMarshaller<CustomTypeEntry> { @Override public void writeTo(ProtoStreamWriter writer, CustomTypeEntry testEntry) throws IOException { writer.writeString("description", testEntry.description); writer.writeString("bigInt", testEntry.bigInt.toString()); } @Override public CustomTypeEntry readFrom(MessageMarshaller.ProtoStreamReader reader) throws IOException { final String desc = reader.readString("description"); final BigInteger bInt = new BigInteger(reader.readString("bigInt")); return new CustomTypeEntry(desc, bInt); } }
CustomTypeEntry.proto
syntax = "proto2"; package example; message CustomTypeEntry { required string description = 1; required string bigInt = 2; }
使用适配器类迁移的代码
您可以使用 ProtoAdapter
注解以生成 Protobuf 模式的方式 marshall CustomType
类,它与您使用 MessageMarshaller
实现创建的 Protobuf 模式兼容。
使用这个方法,您可以:
-
不得在
CustomTypeEntry
类中添加注解。 -
创建一个
CustomTypeEntryAdapter
类,它使用@ProtoAdapter
注释来控制如何生成 Protobuf 模式和 marshaller。 包含
CustomTypeEntryAdapter
类,并包含@AutoProtoSchemaBuilder
注释。注意由于
AutoProtoSchemaBuilder
注释不引用CustomTypeEntry
类,因此该类中包含的任何注解都会被忽略。
以下示例显示了包含 CustomTypeEntry
类的 ProtoStream 注解的 CustomTypeEntryAdapter
类:
CustomTypeEntryAdapter.java
import java.math.BigInteger; import org.infinispan.protostream.annotations.ProtoAdapter; import org.infinispan.protostream.annotations.ProtoFactory; import org.infinispan.protostream.annotations.ProtoField; @ProtoAdapter(CustomTypeEntry.class) public class CustomTypeEntryAdapter { @ProtoFactory public CustomTypeEntry create(String description, String bigInt) { return new CustomTypeEntry(description, new BigInteger(bigInt)); } @ProtoField(number = 1, required = true) public String getDescription(CustomTypeEntry t) { return t.description; } @ProtoField(number = 2, required = true) public String getBigInt(CustomTypeEntry t) { return t.bigInt.toString(); } }
以下示例显示了带有 AutoProtoSchemaBuilder
注解的 SerializationContextInitializer
,该注解引用 CustomTypeEntryAdapter
类:
CustomTypeEntryInitializer.java
import org.infinispan.protostream.GeneratedSchema; import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; @AutoProtoSchemaBuilder(includeClasses = { CustomTypeEntryAdapter.class }, schemaFileName = "custom.proto", schemaFilePath = "proto", schemaPackageName = "example") public interface CustomTypeAdapterInitializer extends GeneratedSchema { }
在没有适配器类的情况下迁移的代码
您可以直接将 ProtoStream 注解添加到 CustomTypeEntry
类中,而不是创建适配器类。
在本例中,生成的 Protobuf 模式与通过 MessageMarshaller
接口添加的缓存中的数据不兼容,因为 BigInteger
是一个单独的消息。即使 adapter 字段写入相同的 String,也无法处理数据。
以下示例显示了直接包含 ProtoStream 注解的 CustomTypeEntry
类:
CustomTypeEntry.java
import java.math.BigInteger; public class CustomTypeEntry { @ProtoField(number = 1) final String description; @ProtoField(number = 2) final BigInteger bigInt; @ProtoFactory public CustomTypeEntry(String description, BigInteger bigInt) { this.description = description; this.bigInt = bigInt; } // public Getter, Setter, equals and HashCode methods and convenient constructors omitted for brevity }
以下示例显示了带有 AutoProtoSchemaBuilder
注解的 SerializationContextInitializer
,该注解引用 CustomTypeEntry
和 BigIntegerAdapter
类:
CustomTypeEntryInitializer.java
import org.infinispan.protostream.GeneratedSchema; import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; import org.infinispan.protostream.types.java.math.BigIntegerAdapter; @AutoProtoSchemaBuilder(includeClasses = { CustomTypeEntry.class, BigIntegerAdapter.class }, schemaFileName = "customtype.proto", schemaFilePath = "proto", schemaPackageName = "example") public interface CustomTypeInitializer extends GeneratedSchema { }
当您从前面的 SerializationContextInitializer
实现中生成 Protobuf 模式时,它会生成以下 Protobuf 模式:
CustomTypeEntry.proto
syntax = "proto2"; package example; message BigInteger { optional bytes bytes = 1; } message CustomTypeEntry { optional string description = 1; optional BigInteger bigInt = 2; }
第 6 章 在 Red Hat OpenShift 上迁移 Data Grid 集群
查看在 Red Hat OpenShift 上运行的 Data Grid 集群的迁移详情。
6.1. OpenShift 上的数据网格
Data Grid 8 引入了 Data Grid Operator,它提供操作智能并降低在 OpenShift 上部署 Data Grid 的管理复杂性。使用 Data Grid 8,Data Grid Operator 处理 Data Grid 集群的大部分配置,包括身份验证、客户端密钥存储、外部网络访问和日志记录。
Data Grid 8.3 引入了一个 Helm chart,用于在 OpenShift 上部署 Data Grid 集群。Data Grid chart 为无法部署 Data Grid Operator 管理的集群或需要手动配置、部署和管理 Data Grid 集群的情况提供替代方案。
创建 Data Grid Services
Data Grid 7.3 引入了 Cache 服务和 Data Grid 服务,用于在 OpenShift 上创建 Data Grid 集群。
要在 Data Grid 7.3 中创建这些服务,您需要导入服务模板,然后使用模板参数和环境变量来配置服务。
在 7.3 中创建缓存服务节点
$ oc new-app cache-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD} \ -p NUMBER_OF_INSTANCES=3 \ -p REPLICATION_FACTOR=2
在 7.3 中创建 Data Grid 服务节点
$ oc new-app datagrid-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD} \ -p NUMBER_OF_INSTANCES=3 -e AB_PROMETHEUS_ENABLE=true
在 Data Grid 8 中创建服务
- 创建 Data Grid Operator 订阅。
-
创建
Infinispan
自定义资源(CR)来实例化和配置 Data Grid 集群。
apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
name: example-infinispan
spec:
replicas: 2
service:
type: Cache 1
- 1
spec.service.type
字段指定是否创建 Cache 服务或 Data Grid 服务节点。
6.1.1. 容器存储
Data Grid 7.3 服务使用挂载于 /opt/datagrid/standalone/data
的存储卷。
Data Grid 8 服务使用挂载于 /opt/infinispan/server/data
的持久性卷声明。
6.1.2. Data Grid CLI
Data Grid 7.3 可让您只通过远程 shell 访问 CLI。通过 Data Grid 7.3 CLI 所做的更改已绑定到 pod,重启后不会保留。借助 Data Grid 8,您可以使用 CLI 作为在 OpenShift 或操作数据上执行管理操作的完整机制。
6.1.3. Data Grid 控制台
Data Grid 7.3 不支持 OpenShift 上的控制台。借助 Data Grid 8,您可以使用控制台监控 OpenShift 上运行的集群,执行管理操作,并远程创建缓存。
6.1.4. 自定义数据网格
Data Grid 7.3 允许您使用 Source-to-Image (S2I)流程和 ConfigMap
API 自定义 OpenShift 上运行的 Data Grid 服务器镜像。
在 Data Grid 8 中,红帽不支持从 Red Hat Container Registry 自定义任何 Data Grid 镜像。
Data Grid Operator 在 OpenShift 上处理 Data Grid 8 集群的部署和管理。
因此,无法使用自定义:
- 发现协议
- 加密机制(SYM_ENCRYPT 或 ASYM_ENCRYPT)
- 持久性数据源
在 Data Grid 8.0 和 8.1 中,Data Grid Operator 不允许部署自定义代码,如 JAR
文件或其他 artefacts。在 Data Grid 8.2 中,您可以使用持久性卷声明(PVC)为 Data Grid 集群提供自定义代码。
6.1.5. 部署配置模板
Data Grid 7.3 中提供的部署配置模板和环境变量已在 Data Grid 8 中删除。
6.2. OpenShift 上的数据网格 8.2
本主题描述了使用 Data Grid Operator 从 Data Grid 8.1 迁移到 8.2 的详情。
Prometheus ServiceMonitor
您不再需要为 Prometheus 创建 ServiceMonitor
来提取数据网格指标。在 OpenShift Container Platform 上为用户定义的项目启用监控,Data Grid Operator 会自动检测到 Prometheus Operator 的安装,然后创建一个 ServiceMonitor
。
6.3. OpenShift 中的数据网格 8.3
对带有 Data Grid Operator 的 Data Grid 8.3 部署没有迁移要求。
6.4. OpenShift 上的数据网格 8.4
使用 Data Grid Operator 或 Data Grid Helm chart 对 Data Grid 8.4 部署没有迁移要求。
6.5. OpenShift 上的 Data Grid 8.5
Data Grid 8.3.1 已从 Data Grid Operator 中删除,因此在升级 Data Grid Operator 前,您需要升级服务器版本。
第 7 章 在缓存存储之间迁移数据
Data Grid 提供了一个 Java 实用程序,用于在缓存存储之间迁移持久性数据。
对于升级数据网格,主要版本之间的功能差异不允许在缓存存储之间向后兼容。您可以使用 StoreMigrator
转换数据,使其与目标版本兼容。
例如,升级到 Data Grid 8.0 将默认的 marshaller 更改为 Protostream。在以前的 Data Grid 版本中,缓存存储使用与 marshalling 的更改不兼容的二进制格式。这意味着 Data Grid 8.0 无法从带有之前 Data Grid 版本的缓存存储中读取。
在其他情况下,Data Grid 版本弃用或删除缓存存储实现,如 JDBC Mixed 和 Binary 存储。在这些情况下,您可以使用 StoreMigrator
转换为不同的缓存存储实现。
7.1. 缓存存储 migrator
Data Grid 提供 CLI migrate store
命令,用于为最新的数据网格缓存存储实施重新创建数据。
存储 migrator 从以前的 Data Grid 版本获取缓存存储作为源,并使用缓存存储实现作为目标。
当您运行存储 migrator 时,它会使用您使用 EmbeddedCacheManager
接口定义的缓存存储类型创建目标缓存。存储 migrator 然后将源存储中的条目加载到内存中,然后将其放入目标缓存中。
存储 migrator 还允许您将数据从一种类型的缓存存储迁移到另一种缓存存储。例如,您可以从基于 JDBC 字符串的缓存存储迁移到 SIFS 缓存存储。
存储 migrator 无法将数据从分段缓存存储迁移到:
- 非分段缓存存储。
- 分段缓存存储,它们具有不同的片段数。
7.2. 配置缓存存储 migrator
使用 migrator.properties
文件配置源和目标缓存存储的属性。
流程
-
创建
migrator.properties
文件。 使用
migrator.properties
文件配置源和目标缓存存储的属性。将
source.
前缀添加到源缓存存储的所有配置属性中。源缓存存储示例
source.type=SOFT_INDEX_FILE_STORE source.cache_name=myCache source.location=/path/to/source/sifs source.version=<version>
重要要从分段缓存存储迁移数据,还必须使用
source.segment_count
属性配置片段数量。片段的数量必须与 Data Grid 配置中的cluster.hash.numSegments
匹配。如果缓存存储的片段数量与对应缓存的片段数量不匹配,则数据网格无法从缓存存储读取数据。将
target.
前缀添加到目标缓存存储的所有配置属性中。目标缓存存储示例
target.type=SINGLE_FILE_STORE target.cache_name=myCache target.location=/path/to/target/sfs.dat
7.2.1. 缓存存储 migrator 的配置属性
在 StoreMigrator
属性中配置源和目标缓存存储。
属性 | 描述 | 必填/选填 |
---|---|---|
| 指定源或目标缓存存储的缓存存储类型。
| 必填 |
属性 | 描述 | 值示例 | 必填/选填 |
---|---|---|---|
| 要备份的缓存的名称。 |
| 必填 |
| 可以使用分段的目标缓存存储的片段数量。
片段数量必须与 Data Grid 配置中的 |
| 选填 |
| 指定自定义 marshaller 类。 | 使用自定义 marshallers 时需要此项。 |
|
指定允许反序列化的完全限定类名称列表。 | 选填 |
| 指定以逗号分隔的正则表达式列表,用于决定允许哪些类反序列化。 |
选填 |
|
指定以逗号分隔的自定义 | 选填 |
属性 | 描述 | 必填/选填 |
---|---|---|
| 指定底层数据库的 dialect。 | 必填 |
|
指定源缓存存储的 marshaller 版本。
*
*
*
*
*
* | 仅用于源存储。 |
| 指定 JDBC 连接 URL。 | 必填 |
| 指定 JDBC 驱动程序的类。 | 必填 |
| 指定数据库用户名。 | 必填 |
| 指定数据库用户名的密码。 | 必填 |
| 禁用数据库 upsert。 | 选填 |
| 指定是否创建表索引。 | 选填 |
| 指定表名称的额外前缀。 | 选填 |
| 指定列名称。 | 必填 |
| 指定列类型。 | 必填 |
|
指定 | 选填 |
要从旧的 Data Grid 版本中迁移 Binary 缓存存储,请在以下属性中将 table.string
view 改为 table.binary.\*
:
-
source.table.binary.table_name_prefix
-
source.table.binary.<id\|data\|timestamp>.name
-
source.table.binary.<id\|data\|timestamp>.type
# Example configuration for migrating to a JDBC String-Based cache store target.type=STRING target.cache_name=myCache target.dialect=POSTGRES target.marshaller.class=org.infinispan.commons.marshall.JavaSerializationMarshaller target.marshaller.allow-list.classes=org.example.Person,org.example.Animal target.marshaller.allow-list.regexps="org.another.example.*" target.marshaller.externalizers=25:Externalizer1,org.example.Externalizer2 target.connection_pool.connection_url=jdbc:postgresql:postgres target.connection_pool.driver_class=org.postrgesql.Driver target.connection_pool.username=postgres target.connection_pool.password=redhat target.db.disable_upsert=false target.db.disable_indexing=false target.table.string.table_name_prefix=tablePrefix target.table.string.id.name=id_column target.table.string.data.name=datum_column target.table.string.timestamp.name=timestamp_column target.table.string.id.type=VARCHAR target.table.string.data.type=bytea target.table.string.timestamp.type=BIGINT target.key_to_string_mapper=org.infinispan.persistence.keymappers. DefaultTwoWayKey2StringMapper
属性 | 描述 | 必填/选填 |
---|---|---|
| 设置数据库目录。 | 必填 |
| 指定要使用的压缩类型。 | 选填 |
# Example configuration for migrating from a RocksDB cache store. source.type=ROCKSDB source.cache_name=myCache source.location=/path/to/rocksdb/database source.compression=SNAPPY
属性 | 描述 | 必填/选填 |
---|---|---|
|
设置包含缓存存储 | 必填 |
# Example configuration for migrating to a Single File cache store. target.type=SINGLE_FILE_STORE target.cache_name=myCache target.location=/path/to/sfs.dat
属性 | 描述 | value |
---|---|---|
必填/选填 |
| 设置数据库目录。 |
必填 |
| 设置数据库索引目录。 |
# Example configuration for migrating to a Soft-Index File cache store. target.type=SOFT_INDEX_FILE_STORE target.cache_name=myCache target.location=path/to/sifs/database target.location=path/to/sifs/index
7.3. 迁移 Data Grid 缓存存储
运行存储 migrator 将数据从一个缓存存储迁移到另一个缓存存储。
先决条件
- 获取 Data Grid CLI。
-
创建
migrator.properties
文件,以配置源和目标缓存存储。
流程
-
运行
migrate store -p /path/to/migrator.properties
CLI 命令