Data Grid 服务器指南
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 Data Grid Server 入门 复制链接链接已复制到粘贴板!
快速设置数据网格服务器并了解基础知识。
1.1. 数据网格服务器要求 复制链接链接已复制到粘贴板!
Data Grid Server 需要 Java 虚拟机。有关支持版本的详情,请参阅 Data Grid 支持的配置。
1.2. 下载服务器发布 复制链接链接已复制到粘贴板!
Data Grid 服务器分发是 Java 库(JAR 文件)、配置文件 和数据 目录的存档。
流程
- 访问红帽客户门户。
- 从 软件下载部分 下载 Red Hat Data Grid 8.1 Server。
使用服务器下载存档作为参数运行
md5sum或sha256sum命令,例如:sha256sum jboss-datagrid-${version}-server.zip$ sha256sum jboss-datagrid-${version}-server.zipCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
与 Data Grid Software Details 页面中的
MD5或SHA-256校验和值进行比较。
参考
- Data Grid Server README 描述了服务器分发的内容。
1.3. 安装 Data Grid Server 复制链接链接已复制到粘贴板!
在主机系统上安装 Data Grid Server 分发。
前提条件
下载数据网格服务器分发存档。
流程
- 使用任何合适的工具将 Data Grid Server 存档提取到主机文件系统中。
unzip redhat-datagrid-8.1.1-server.zip
$ unzip redhat-datagrid-8.1.1-server.zip
生成的目录是 $RHDG_HOME。
1.4. 创建和修改用户 复制链接链接已复制到粘贴板!
Data Grid Server 要求用户对默认属性域进行身份验证。在访问 Data Grid Server 之前,您必须至少创建一个用户和密码来添加凭证。您还可以添加和修改用户所属的安全授权组。
流程
-
在
$RHDG_HOME中打开一个终端。 -
使用
user命令创建和修改 Data Grid 用户。
使用 命令,运行 help user 的更多详细信息。
创建用户和密码
Linux
bin/cli.sh user create myuser -p "qwer1234!"
$ bin/cli.sh user create myuser -p "qwer1234!"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft Windows
bin\cli.bat user create myuser -p "qwer1234!"
$ bin\cli.bat user create myuser -p "qwer1234!"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建具有组成员资格的用户
Linux
bin/cli.sh user create myuser -p "qwer1234!" -g supervisor,reader,writer
$ bin/cli.sh user create myuser -p "qwer1234!" -g supervisor,reader,writerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft Windows
bin\cli.bat user create myuser -p "qwer1234!" -g supervisor,reader,writer
$ bin\cli.bat user create myuser -p "qwer1234!" -g supervisor,reader,writerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. 启动 Data Grid Server 复制链接链接已复制到粘贴板!
在本地主机上运行 Data Grid Server。
前提条件
- 至少创建一个 Data Grid 用户。
流程
-
在
$RHDG_HOME中打开一个终端。 使用
服务器脚本运行 Data Grid Server。- Linux
bin/server.sh
$ bin/server.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Microsoft Windows
bin\server.bat
bin\server.batCopy to Clipboard Copied! Toggle word wrap Toggle overflow
当数据网格服务器记录以下信息时,它成功运行:
ISPN080004: Protocol SINGLE_PORT listening on 127.0.0.1:11222 ISPN080034: Server '...' listening on http://127.0.0.1:11222 ISPN080001: Data Grid Server <version> started in <mm>ms
ISPN080004: Protocol SINGLE_PORT listening on 127.0.0.1:11222
ISPN080034: Server '...' listening on http://127.0.0.1:11222
ISPN080001: Data Grid Server <version> started in <mm>ms
验证
-
在任何浏览器中打开
127.0.0.1:11222/console/。 - 在提示符处输入您的凭证,然后继续到 Data Grid 控制台。
1.6. 验证集群视图 复制链接链接已复制到粘贴板!
同一网络上的 Data Grid 节点会自动发现相互发现并形成集群。
完成此流程,在使用本地运行的 Data Grid Server 实例的默认 TCP 堆栈中使用 MPING 协议观察集群发现。如果要针对自定义网络要求调整集群传输,请参阅设置 Data Grid 集群的文档。
此流程旨在演示集群发现的原则,它不适用于生产环境。在命令行中指定端口偏移等操作不是为生产环境配置集群传输的可靠方法。
前提条件
有一个 Data Grid Server 实例正在运行。
流程
-
在
$RHDG_HOME中打开一个终端。 将根目录复制到
server2。cp -r server server2
$ cp -r server server2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定端口偏移和
server2目录。bin/server.sh -o 100 -s server2
$ bin/server.sh -o 100 -s server2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以在控制台的 127.0.0.1:11222/console/cluster-membership 中查看集群成员资格。
Data Grid 还会在节点加入集群时记录以下信息:
1.7. 关闭 Data Grid 服务器 复制链接链接已复制到粘贴板!
停止单独运行的服务器,或者安全地关闭集群。
流程
- 创建与 Data Grid 的 CLI 连接。
使用以下方法之一关闭 Data Grid 服务器:
使用
shutdown cluster命令停止集群中的所有节点,例如:[//containers/default]> shutdown cluster
[//containers/default]> shutdown clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令将集群状态保存到集群中每个节点的
data文件夹。如果使用缓存存储,shutdown cluster命令也会保留缓存中的所有数据。使用
shutdown server命令和服务器主机名停止单个服务器实例,例如:[//containers/default]> shutdown server <my_server01>
[//containers/default]> shutdown server <my_server01>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
shutdown server 命令不会等待重新平衡操作完成,如果同时指定了多个主机名,这可能会导致数据丢失。
有关使用 命令的更多详细信息,运行 help shutdown。
验证
在关闭服务器时,Data Grid 会记录以下信息:
ISPN080002: Data Grid Server stopping ISPN000080: Disconnecting JGroups channel cluster ISPN000390: Persisted state, version=<$version> timestamp=YYYY-MM-DDTHH:MM:SS ISPN080003: Data Grid Server stopped
ISPN080002: Data Grid Server stopping
ISPN000080: Disconnecting JGroups channel cluster
ISPN000390: Persisted state, version=<$version> timestamp=YYYY-MM-DDTHH:MM:SS
ISPN080003: Data Grid Server stopped
1.7.1. 重启 Data Grid 集群 复制链接链接已复制到粘贴板!
当您将 Data Grid 集群在关闭后重新上线时,您应该在添加或删除节点或修改集群状态前等待集群可用。
如果您使用 shutdown server 命令关闭集群节点,则必须以相反的顺序重启每台服务器。
例如,如果您关闭 server1,然后关闭 server2,您应该首先启动 server2,然后启动 server1。
如果您使用 shutdown cluster 命令关闭集群,集群只有在所有节点重新加入后才能完全正常工作。
您可以以任何顺序重启节点,但集群处于 DEGRADED 状态,直到关闭前加入的所有节点都处于运行状态。
1.8. Data Grid Server Filesystem 复制链接链接已复制到粘贴板!
Data Grid Server 在主机文件系统上使用 $RHDG_HOME 的以下文件夹:
有关 $RHDG_HOME 目录中每个文件夹的描述,以及可以用来自定义文件系统的系统属性,请参阅 Data Grid Server README。
1.8.1. 服务器根目录 复制链接链接已复制到粘贴板!
除了 bin 和 docs 文件夹中的资源外,您应该与之交互的 $RHDG_HOME 下的唯一文件夹是服务器根目录,默认情况下名为 server。
您可以在同一 $RHDG_HOME 目录或不同的目录中创建多个节点,但每个 Data Grid Server 实例必须具有自己的服务器根目录。例如,5 个节点的集群可以在文件系统中有以下服务器根目录:
├── server ├── server1 ├── server2 ├── server3 └── server4
├── server
├── server1
├── server2
├── server3
└── server4
每个服务器根目录都应该包含以下文件夹:
├── server │ ├── conf │ ├── data │ ├── lib │ └── log
├── server
│ ├── conf
│ ├── data
│ ├── lib
│ └── log
server/conf
包含 Data Grid Server 实例的 infinispan.xml 配置文件。
Data Grid 将配置分成两个层:
- dynamic
-
为数据可扩展性创建可变缓存配置。
Data Grid 服务器会永久保存您在运行时创建的缓存,以及跨节点分布的集群状态。每个加入节点都会收到一个完整的集群状态,在发生更改时 Data Grid Server 同步所有节点。 - Static
-
将配置添加到
infinispan.xml中用于底层服务器机制,如集群传输、安全性和共享数据源。
server/data
提供 Data Grid 服务器用来维护集群状态的内部存储。
切勿直接删除或修改 server/data 中的内容。
在服务器运行时 修改 cache.xml 等文件可能会导致损坏。删除内容可能会导致状态不正确,这意味着集群在关闭后无法重启。
server/lib
包含用于自定义过滤器、自定义事件监听程序、JDBC 驱动程序、自定义 ServerTask 实现等的扩展 JAR 文件。
server/log
包含 Data Grid Server 日志文件。
第 2 章 配置 Data Grid 服务器网络 复制链接链接已复制到粘贴板!
通过数据网格服务器,您可以配置接口和端口,使端点在网络上可用。
默认情况下,Data Grid 服务器多个x 端点到单个 TCP/IP 端口,并自动检测入站客户端请求的协议。
2.1. 服务器接口 复制链接链接已复制到粘贴板!
Data Grid 服务器可以使用不同的策略来绑定到 IP 地址。
2.1.1. 地址策略 复制链接链接已复制到粘贴板!
使用 inet-address 策略,将单个 公共接口 映射到 IPv4 回环地址(127.0.0.1)。
<interfaces>
<interface name="public">
<inet-address value="${infinispan.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<inet-address value="${infinispan.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
您可以使用 CLI -b 参数或 infinispan.bind.address 属性从命令行选择特定地址。请参阅 更改默认绑定地址。
2.1.2. 环回策略 复制链接链接已复制到粘贴板!
选择回环地址。
-
IPv4 为回送地址保留了地址块
127.0.0.0/8。 -
IPv6 块
::1是唯一的回环地址。
<interfaces>
<interface name="public">
<loopback/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<loopback/>
</interface>
</interfaces>
2.1.3. 非循环策略 复制链接链接已复制到粘贴板!
选择非回环地址。
<interfaces>
<interface name="public">
<non-loopback/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<non-loopback/>
</interface>
</interfaces>
2.1.4. 网络地址策略 复制链接链接已复制到粘贴板!
根据 IP 地址选择网络。
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
2.1.5. 任何地址策略 复制链接链接已复制到粘贴板!
选择 INADDR_ANY 通配符地址。因此,Data Grid 服务器侦听所有接口。
<interfaces>
<interface name="public">
<any-address/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<any-address/>
</interface>
</interfaces>
2.1.6. 链接本地策略 复制链接链接已复制到粘贴板!
选择 本地链接 IP 地址。
-
IPv4 为本地链路寻址保留了地址块
169.254.0.0/16(169.254.0.0 - 169.254.255.255)。 -
IPv6 为本地链路单播寻址保留了地址块
fe80::/10。
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
2.1.7. 站点本地策略 复制链接链接已复制到粘贴板!
选择 site-local (专用)IP 地址。
-
IPv4 地址块
10.0.0.0/8,172.16.0.0/12, 和192.168.0.0/16保留用于站点本地寻址。 -
IPv6 为站点链路单播地址保留了地址块
fc00::/7。
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
2.1.8. 匹配主机策略 复制链接链接已复制到粘贴板!
解析主机名并选择分配给任何网络接口的 IP 地址之一。
Data Grid 服务器枚举所有可用的操作系统接口,以查找从配置中的主机名解析的 IP 地址。
<interfaces>
<interface name="public">
<match-host value="my_host_name"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<match-host value="my_host_name"/>
</interface>
</interfaces>
2.1.9. 匹配接口策略 复制链接链接已复制到粘贴板!
选择分配给与正则表达式匹配的网络接口的 IP 地址。
Data Grid 服务器枚举所有可用的操作系统接口,以在您的配置中找到接口名称。
将正则表达式与此策略一起使用以获得额外的灵活性。
<interfaces>
<interface name="public">
<match-interface value="eth0"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<match-interface value="eth0"/>
</interface>
</interfaces>
2.1.10. 匹配地址策略 复制链接链接已复制到粘贴板!
与 inet-address 类似,但使用正则表达式选择 IP 地址。
Data Grid 服务器枚举所有可用的操作系统接口,以查找您的配置中的 IP 地址。
将正则表达式与此策略一起使用以获得额外的灵活性。
<interfaces>
<interface name="public">
<match-address value="132\..*"/>
</interface>
</interfaces>
<interfaces>
<interface name="public">
<match-address value="132\..*"/>
</interface>
</interfaces>
2.1.11. 回退策略 复制链接链接已复制到粘贴板!
接口配置可以包含多个策略。Data Grid 服务器按声明的顺序尝试每个策略。
例如,在以下配置中,Data Grid 服务器首先尝试匹配主机,然后尝试一个 IP 地址,然后回退到 INADDR_ANY 通配符地址:
2.1.12. 更改 Data Grid 服务器的默认绑定地址 复制链接链接已复制到粘贴板!
您可以使用 server -b 开关或 infinispan.bind.address 系统属性绑定到不同的地址。
例如,将 公共接口 绑定到 127.0.0.2,如下所示:
- Linux
bin/server.sh -b 127.0.0.2
$ bin/server.sh -b 127.0.0.2
- Windows
bin\server.bat -b 127.0.0.2
bin\server.bat -b 127.0.0.2
2.2. 套接字绑定 复制链接链接已复制到粘贴板!
套接字绑定将端点连接器映射到服务器接口和端口。
默认情况下,Data Grid 服务器提供以下套接字绑定:
<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>
<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>
-
socket-bindings声明默认的接口和端口偏移。 -
默认绑定到 hotrod 和 rest 连接器到默认端口11222。 Memcached将 memcached 连接器绑定到端口11221。注意默认情况下禁用 memcached 端点。
要覆盖 socket-binding 声明的默认接口,请指定 interface 属性。
例如,您可以添加名为 "private" 的接口 声明:
然后,您可以在 socket-binding 声明中指定 interface="private" 来绑定到私有 IP 地址,如下所示:
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}">
...
<socket-binding name="private_binding" interface="private" port="1234"/>
</socket-bindings>
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}">
...
<socket-binding name="private_binding" interface="private" port="1234"/>
</socket-bindings>
2.2.1. 指定端口偏移 复制链接链接已复制到粘贴板!
在同一主机上运行多个实例时,使用 Data Grid 服务器配置端口偏移。默认端口偏移为 0。
使用带有 Data Grid CLI 或 infinispan.socket.binding.port-offset 系统属性的 -o 开关来设置端口偏移。
例如,启动偏移为 100 的服务器实例,如下所示:使用默认配置时,这会导致 Data Grid 服务器侦听端口 11322。
- Linux
bin/server.sh -o 100
$ bin/server.sh -o 100
- Windows
bin\server.bat -o 100
bin\server.bat -o 100
2.3. 数据网格协议处理 复制链接链接已复制到粘贴板!
数据网格服务器使用路由器连接器通过同一 TCP 端口 11222 公开多个协议。通过减少未授权用户的攻击面,将单个端口用于多个协议简化了配置和管理,并提高安全性。
数据网格服务器通过端口 11222 处理 HTTP/1.1、HTTP/2 和 Hot Rod 协议请求,如下所示:
- HTTP/1.1 升级标头
-
客户端请求可以包含
HTTP/1.1 升级标头字段,以启动与 Data Grid 服务器的 HTTP/1.1 连接。然后,客户端应用程序可以发送Upgrade: protocol标头字段,其中protocol是 Data Grid 服务器端点。 - Application-Layer Protocol Negotiation (ALPN)/Transport Layer Security (TLS)
- 客户端应用程序指定 Data Grid 服务器端点的 Server Name Indication (SNI)映射,以安全的方式协商协议。
- 自动 Hot Rod 检测
- 如果单一端口路由器配置包含 Hot Rod,则包含 Hot Rod 的客户端请求会自动路由到 Hot Rod。
2.3.1. 为 ALPN 配置客户端 复制链接链接已复制到粘贴板!
配置客户端,以在 TLS 握手与 Data Grid 服务器期间为协议协商提供 ALPN 消息。
前提条件
- 通过加密启用数据网格服务器端点。
流程
为您的客户端应用程序提供适当的库,以处理与 Data Grid 服务器的 ALPN/TLS 交换。
注意Data Grid 为 Java 使用 Wildfly OpenSSL 绑定。
- 根据情况配置具有信任存储的客户端。
以编程方式
热 Rod 客户端属性
infinispan.client.hotrod.server_list = 127.0.0.1:11222 infinispan.client.hotrod.use_ssl = true infinispan.client.hotrod.trust_store_file_name = truststore.pkcs12 infinispan.client.hotrod.trust_store_password = trust_store_password
infinispan.client.hotrod.server_list = 127.0.0.1:11222
infinispan.client.hotrod.use_ssl = true
infinispan.client.hotrod.trust_store_file_name = truststore.pkcs12
infinispan.client.hotrod.trust_store_password = trust_store_password
第 3 章 配置 Data Grid Server 端点 复制链接链接已复制到粘贴板!
Data Grid 服务器提供侦听器端点,用于处理来自远程客户端应用程序的请求。
3.1. Data Grid Endpoints 复制链接链接已复制到粘贴板!
Data Grid 端点通过不同的连接器协议公开 CacheManager 接口,以便您可以远程访问数据并执行操作来管理和维护 Data Grid 集群。
您可以在不同的套接字绑定中定义多个端点连接器。
3.1.1. 热 Rod 复制链接链接已复制到粘贴板!
热 Rod 是一种二进制 TCP 客户端-服务器协议,与基于文本的协议相比,提供更快的数据访问和提高性能。
Data Grid 以 Java、C++、C++、Node.js 和其他编程语言提供 Hot Rod 客户端库。
拓扑状态传输
Data Grid 使用拓扑缓存为客户端提供集群视图。拓扑缓存包含将内部 JGroups 传输地址映射到公开的 Hot Rod 端点的条目。
当客户端发送请求时,Data Grid 服务器会将请求标头中的拓扑 ID 与缓存中的拓扑 ID 进行比较。如果客户端有旧的拓扑 ID,则数据网格服务器会发送新的拓扑视图。
集群拓扑视图允许 Hot Rod 客户端在节点加入和离开时立即检测,从而启用动态负载平衡和故障转移。
在分布式缓存模式中,一致的哈希算法也使得 Hot Rod 客户端请求直接路由到主要所有者。
3.1.2. REST 复制链接链接已复制到粘贴板!
参考
Data Grid 公开了一个 RESTful 接口,它允许 HTTP 客户端访问数据、监控和维护集群,以及执行管理操作。
您可以使用标准 HTTP 负载均衡器为客户端提供负载均衡和故障转移功能。但是,HTTP 负载均衡器会维护静态集群视图,并在集群拓扑更改时需要手动更新。
3.1.3. 协议比较 复制链接链接已复制到粘贴板!
| 热 Rod | HTTP / REST | |
|---|---|---|
| Topology-aware | Y | N |
| hash-aware | Y | N |
| 加密 | Y | Y |
| 身份验证 | Y | Y |
| 条件操作 | Y | Y |
| bulk ops | Y | N |
| Transactions | Y | N |
| 监听器 | Y | N |
| 查询 | Y | Y |
| 执行 | Y | N |
| 跨站点故障切换 | Y | N |
3.2. 端点连接器 复制链接链接已复制到粘贴板!
您可以使用连接器声明配置数据网格服务器端点,用于指定套接字绑定、身份验证机制和加密配置。
默认端点连接器配置如下:
<endpoints socket-binding="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> <memcached-connector socket-binding="memcached"/> </endpoints>
<endpoints socket-binding="default">
<hotrod-connector name="hotrod"/>
<rest-connector name="rest"/>
<memcached-connector socket-binding="memcached"/>
</endpoints>
-
端点包含端点连接器声明,并为端点定义全局配置,如默认套接字绑定、安全域,以及客户端是否需要提供有效的 TLS 证书。 -
<HotRod-connector name="hotrod"/> 声明一个 Hot Rod 连接器。 -
<REST-connector name="rest"/> 声明一个 Hot Rod 连接器。 -
<memcached-connector socket-binding="memcached"/> 声明使用 memcached 套接字绑定的 Memcached 连接器。
参考
urn:infinispan:server 模式提供所有可用的端点配置。
3.2.1. 热 Rod Connectors 复制链接链接已复制到粘贴板!
热 Rod 连接器声明启用 Hot Rod 服务器。
-
name="hotrod"逻辑上命名 Hot Rod 连接器。 -
topology-state-transfer调整为 Hot Rod 客户端提供集群拓扑的状态传输操作。 -
身份验证配置SASL 身份验证机制。 -
加密配置客户端连接的 TLS 设置。
参考
urn:infinispan:server 模式提供所有可用的 Hot Rod 连接器配置。
3.2.2. REST Connectors 复制链接链接已复制到粘贴板!
REST 连接器声明启用 REST 服务器。
-
name="rest"逻辑上命名 REST 连接器。 -
身份验证配置身份验证机制。 -
CORS
-rules为跨域请求指定 CORS (Cross Origin 资源共享)规则。 -
加密配置客户端连接的 TLS 设置。
参考
urn:infinispan:server 模式提供所有可用的 REST 连接器配置。
3.3. 数据网格服务器端口和协议 复制链接链接已复制到粘贴板!
Data Grid Server 在您的网络上公开端点以进行远程客户端访问。
| 端口 | 协议 | 描述 |
|---|---|---|
|
| TCP | hot Rod 和 REST 端点 |
|
| TCP | Memcached 端点,默认为禁用。 |
3.3.1. 为远程连接配置网络防火墙 复制链接链接已复制到粘贴板!
调整任何防火墙规则,以允许服务器和外部客户端之间的流量。
流程
例如,在 Red Hat Enterprise Linux (RHEL)工作站中,您可以使用 firewalld 允许到端口 11222 的流量,如下所示:
firewall-cmd --add-port=11222/tcp --permanent success firewall-cmd --list-ports | grep 11222 11222/tcp
# firewall-cmd --add-port=11222/tcp --permanent
success
# firewall-cmd --list-ports | grep 11222
11222/tcp
要配置在网络间应用的防火墙规则,您可以使用 nftables 工具。
第 4 章 保护对 Data Grid 服务器的访问 复制链接链接已复制到粘贴板!
配置身份验证和加密机制,以保护对数据的访问并保护您的数据。
4.1. 定义 Data Grid Server Security Realms 复制链接链接已复制到粘贴板!
安全域为 Data Grid 服务器端点提供身份、加密、身份验证和授权信息。
4.1.1. 属性 Realms 复制链接链接已复制到粘贴板!
属性域使用属性文件来定义用户和组。
users.properties 以纯文本格式将用户名映射到密码。如果您使用 DIGEST-MD5 SASL 机制或 Digest HTTP 机制,也可以预先提取密码。
myuser=a_password user2=another_password
myuser=a_password
user2=another_password
groups.properties 将用户映射到角色。
myuser=supervisor,reader,writer user2=supervisor
myuser=supervisor,reader,writer
user2=supervisor
属性域配置
支持的验证机制
属性域支持以下身份验证机制:
-
sasl:
PLAIN,DIGEST114, 和SCRAM114 -
HTTP (REST):
Basic和Digest
4.1.1.1. 创建和修改用户 复制链接链接已复制到粘贴板!
Data Grid Server 要求用户对默认属性域进行身份验证。在访问 Data Grid Server 之前,您必须至少创建一个用户和密码来添加凭证。您还可以添加和修改用户所属的安全授权组。
流程
-
在
$RHDG_HOME中打开一个终端。 -
使用
user命令创建和修改 Data Grid 用户。
使用 命令,运行 help user 的更多详细信息。
创建用户和密码
Linux
bin/cli.sh user create myuser -p "qwer1234!"
$ bin/cli.sh user create myuser -p "qwer1234!"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft Windows
bin\cli.bat user create myuser -p "qwer1234!"
$ bin\cli.bat user create myuser -p "qwer1234!"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建具有组成员资格的用户
Linux
bin/cli.sh user create myuser -p "qwer1234!" -g supervisor,reader,writer
$ bin/cli.sh user create myuser -p "qwer1234!" -g supervisor,reader,writerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft Windows
bin\cli.bat user create myuser -p "qwer1234!" -g supervisor,reader,writer
$ bin\cli.bat user create myuser -p "qwer1234!" -g supervisor,reader,writerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.2. LDAP 域 复制链接链接已复制到粘贴板!
LDAP 域连接到 LDAP 服务器,如 OpenLDAP、红帽目录服务器、Apache 目录服务器或 Microsoft Active Directory,以验证用户并获取成员资格信息。
LDAP 服务器可以有不同的条目布局,具体取决于服务器和部署的类型。因此,LDAP 域配置比较复杂。本文档超出了本文档的范围,为所有可能的配置提供示例。
LDAP 域配置
- 1
- 将 LDAP 域命名为。
- 2
- 指定 LDAP 服务器连接 URL。
- 3
- 指定要连接到 LDAP 服务器的主体和凭证。重要
LDAP 连接的主体必须具有执行 LDAP 查询和访问特定属性所需的权限。
- 4
- (可选)通过指定连接超时等来调优 LDAP 服务器连接。
- 5
- 验证用户凭据。Data Grid 会尝试使用配置的凭证连接到 LDAP 服务器。或者,您可以使用
user-password-mapper元素来指定密码。 - 6
- 将 LDAP 条目映射到身份。
rdn-identifier指定一个 LDAP 属性,它根据提供的标识符查找用户条目,通常是用户名;例如uid或sAMAccountName属性。 - 7
- 定义一个起始上下文,将搜索限制为包含用户条目的 LDAP 子树。
- 8
- 检索用户所属的所有组。通常可通过两种方式存储成员资格信息:
-
在组条目下,通常在
member属性中具有 classgroupOfNames。在这种情况下,您可以使用属性过滤器,如上例配置中所示。此过滤器搜索与提供的过滤器匹配的条目,该条目将找到与用户的 DN 相等的成员属性的组。然后,过滤器提取组条目的 CN (由 指定),并将其添加到用户的Roles中。 在
memberOf属性的用户条目中。在这种情况下,您应该使用如下属性引用:<attribute-reference reference="memberOf" from="cn" to="Roles" />此引用从用户条目中获取所有
memberOf属性,提取由 指定的 CN,并将它们添加到用户的Roles中。
-
在组条目下,通常在
支持的验证机制
LDAP 域直接支持以下身份验证机制:
-
sasl:
PLAIN,DIGEST114, 和SCRAM114 -
HTTP (REST):
Basic和Digest
4.1.2.1. LDAP Realm Principal Rewriting 复制链接链接已复制到粘贴板!
有些 SASL 身份验证机制,如 GSSAPI、GS2-KRB5 和 Negotiate,提供需要 清理 的用户名,然后才能使用它来搜索 LDAP 服务器。
- 1
- 定义使用正则表达式从主体中提取用户名的重写器。
4.1.3. 信任存储域 复制链接链接已复制到粘贴板!
信任存储域使用密钥存储,其中包含允许连接到 Data Grid 服务器的所有客户端的公共证书。
支持的验证机制
信任存储域使用 client-certificate 身份验证机制:
-
SASL:
EXTERNAL -
HTTP (REST):
CLIENT_CERT
4.1.4. 令牌域 复制链接链接已复制到粘贴板!
令牌域使用外部服务来验证令牌,并需要与 RFC-7662 (OAuth2 Token Introspection)兼容的提供程序,如 Red Hat SSO。
支持的验证机制
令牌域支持以下身份验证机制:
-
SASL: OAUTH
BEARER -
HTTP (REST):
Bearer
4.2. 创建 Data Grid Server Identities 复制链接链接已复制到粘贴板!
服务器身份在安全域中定义,并使数据网格服务器能够将其身份证明给客户端。
4.2.1. 设置 SSL 标识 复制链接链接已复制到粘贴板!
SSL 身份使用密钥存储,该密钥存储包含证书或证书链。
如果安全域包含 SSL 身份,Data Grid 服务器会自动为使用这些安全域的端点启用加密。
流程
为 Data Grid 服务器创建密钥存储。
重要数据网格服务器支持以下密钥存储格式:JKS、JCEKS、PKCS12、BKS、BCFKS 和 UBER。
在生产环境中,服务器证书应由可信证书颁发机构(包括 Root 或 Intermediate CA)签名。
-
将密钥存储添加到
$ISPN_HOME/server/conf目录中。 -
向 Data
Grid 服务器安全域添加服务器身份定义。 - 指定密钥存储的名称以及密码和别名。
4.2.1.1. SSL 身份配置 复制链接链接已复制到粘贴板!
以下示例为 Data Grid 服务器配置 SSL 身份:
4.2.1.2. 自动生成密钥存储 复制链接链接已复制到粘贴板!
配置 Data Grid 服务器,以在启动时自动生成密钥存储。
自动生成的密钥存储:
- 不应该在生产环境中使用。
- 在需要时生成;例如,从客户端获取第一个连接时。
- 包含您可以在 Hot Rod 客户端中使用的证书。
流程
-
在服务器配置中包含
keystore元素的generate-self-signed-certificate-host属性。 - 为服务器证书指定主机名作为值。
带有生成的密钥存储的 SSL 服务器身份
- 1
- 使用
localhost生成密钥存储
4.2.1.3. 调优 SSL 协议和加密套件 复制链接链接已复制到粘贴板!
您可以通过 Data Grid 服务器 SSL 身份配置 SSL 引擎,以使用特定的协议和密码。
您必须确保为您要使用的协议功能设置正确的密码;例如 HTTP/2 ALPN。
流程
-
将
engine元素添加到您的 Data Grid 服务器 SSL 身份。 -
使用
enabled-protocols和enabled-ciphersuites属性配置 SSL 引擎。
SSL 引擎配置
4.2.2. 设置 Kerberos 标识 复制链接链接已复制到粘贴板!
Kerberos 身份使用 keytab 文件,其中包含来自 Kerberos 密码的服务主体名称和加密密钥。
keytab 文件可以包含用户和服务帐户主体。但是,Data Grid 服务器只使用服务主体。因此,Data Grid 服务器可以为客户端提供身份,并允许客户端与 Kerberos 服务器进行身份验证。
在大多数情况下,您可以为 Hot Rod 和 REST 连接器创建唯一的主体。例如,您在"INFINISPAN.ORG"域中有一个"datagrid"服务器。在这种情况下,您应该创建以下服务主体:
-
HotRod/datagrid@INFINISPAN.ORG标识 Hot Rod 服务。 -
HTTP/datagrid@INFINISPAN.ORG标识 REST 服务。
流程
为 Hot Rod 和 REST 服务创建 keytab 文件。
- Linux
ktutil ktutil: addent -password -p datagrid@INFINISPAN.ORG -k 1 -e aes256-cts Password for datagrid@INFINISPAN.ORG: [enter your password] ktutil: wkt http.keytab ktutil: quit
$ ktutil ktutil: addent -password -p datagrid@INFINISPAN.ORG -k 1 -e aes256-cts Password for datagrid@INFINISPAN.ORG: [enter your password] ktutil: wkt http.keytab ktutil: quitCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Microsoft Windows
ktpass -princ HTTP/datagrid@INFINISPAN.ORG -pass * -mapuser INFINISPAN\USER_NAME ktab -k http.keytab -a HTTP/datagrid@INFINISPAN.ORG
$ ktpass -princ HTTP/datagrid@INFINISPAN.ORG -pass * -mapuser INFINISPAN\USER_NAME $ ktab -k http.keytab -a HTTP/datagrid@INFINISPAN.ORGCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将 keytab 文件复制到
$ISPN_HOME/server/conf目录中。 -
向 Data
Grid 服务器安全域添加服务器身份定义。 - 指定为 Hot Rod 和 REST 连接器提供服务主体的 keytab 文件的位置。
- 将 Kerberos 服务主体命名为。
4.2.2.1. Kerberos 身份配置 复制链接链接已复制到粘贴板!
以下示例为 Data Grid 服务器配置 Kerberos 身份:
4.3. 配置端点身份验证机制 复制链接链接已复制到粘贴板!
使用 SASL 或 HTTP 身份验证机制配置 Hot Rod 和 REST 连接器,以与客户端进行身份验证。
Data Grid 服务器需要用户身份验证才能访问命令行界面(CLI)和控制台以及 Hot Rod 和 REST 端点。Data Grid 服务器还根据您定义的安全域自动配置身份验证机制。
4.3.1. Data Grid 服务器身份验证 复制链接链接已复制到粘贴板!
Data Grid 服务器根据您分配给端点的安全域自动配置身份验证机制。
SASL 身份验证机制
以下 SASL 身份验证机制适用于 Hot Rod 端点:
| Security Realm | SASL 身份验证机制 |
|---|---|
| 属性 Realms 和 LDAP Realms | SCRAMJPEG, DIGEST可以, CRAM-MD5 |
| 令牌域 | OAUTHBEARER |
| 信任 Realms | EXTERNAL |
| Kerberos Identities | GSSAPI, GS2-KRB5 |
| SSL/TLS 标识 | PLAIN |
HTTP 身份验证机制
以下 HTTP 身份验证机制适用于 REST 端点:
| Security Realm | HTTP 身份验证机制 |
|---|---|
| 属性 Realms 和 LDAP Realms | 摘要 |
| 令牌域 | BEARER_TOKEN |
| 信任 Realms | CLIENT_CERT |
| Kerberos Identities | SPNEGO |
| SSL/TLS 标识 | BASIC |
默认配置
Data Grid 服务器提供了一个名为 "default" 的安全域,它使用一个属性 realm,在 $RHDG_HOME/server/ conf/users.properties 中定义的纯文本凭证,如以下代码片段所示:
端点配置将"默认"安全域分配给 Hot Rod 和 REST 连接器,如下所示:
<endpoints socket-binding="default" security-realm="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
<endpoints socket-binding="default" security-realm="default">
<hotrod-connector name="hotrod"/>
<rest-connector name="rest"/>
</endpoints>
由于上述配置,Data Grid 服务器需要使用属性 realm 支持的机制进行身份验证。
4.3.2. 手动配置 Hot Rod 身份验证 复制链接链接已复制到粘贴板!
明确配置 Hot Rod 连接器身份验证,以覆盖 Data Grid 服务器用于安全域的默认 SASL 身份验证机制。
流程
-
在 Hot Rod 连接器配置中添加
身份验证定义。 - 指定 Hot Rod 连接器用来进行身份验证的 Data Grid 安全域。
- 指定要使用的 Hot Rod 端点的 SASL 身份验证机制。
- 根据需要配置 SASL 身份验证属性。
4.3.2.1. 热 Rod 身份验证配置 复制链接链接已复制到粘贴板!
带有 SCRAM、DIGEST 和 PLAIN 验证的热 Rod 连接器
带有 Kerberos 验证的热 Rod 连接器
4.3.2.2. 热 Rod 端点身份验证机制 复制链接链接已复制到粘贴板!
Data Grid 支持带有 Hot Rod 连接器的以下 SASL 验证机制:
| 身份验证机制 | 描述 | 相关详情 |
|---|---|---|
|
|
以纯文本格式使用凭据。您应该只在加密连接中使用 |
与 |
|
|
使用哈希算法和非ce 值。热 Rod 连接器支持 |
与 |
|
|
除了哈希算法和非ce 值外,还使用 salt 值。热 Rod 连接器支持 |
与 |
|
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
与 |
|
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
与 |
|
| 使用客户端证书。 |
与 |
|
|
使用 OAuth 令牌并需要一个 |
与EARER |
4.3.2.3. SASL 服务质量(QoP) 复制链接链接已复制到粘贴板!
如果 SASL 机制支持完整性和隐私保护设置,您可以使用 qop 属性将它们添加到 Hot Rod 连接器配置中。
| QoP 设置 | 描述 |
|---|---|
|
| 仅进行身份验证。 |
|
| 使用完整性保护进行身份验证。 |
|
| 使用完整性和隐私保护进行身份验证。 |
4.3.2.4. SASL 策略 复制链接链接已复制到粘贴板!
SASL 策略可让您控制哪些身份验证机制 Hot Rod 连接器可以使用。
| 策略 | 描述 | 默认值 |
|---|---|---|
|
| 只使用支持会话之间转发保密的 SASL 机制。这意味着破坏一个会话不会自动提供破坏未来会话的信息。 | false |
|
| 仅使用需要客户端凭证的 SASL 机制。 | false |
|
| 不要使用易受简单纯文本攻击的 SASL 机制。 | false |
|
| 不要使用易受活跃、非字典、攻击的 SASL 机制。 | false |
|
| 不要使用易受被动字典攻击的 SASL 机制。 | false |
|
| 不要使用接受匿名登录的 SASL 机制。 | true |
数据网格缓存授权根据角色和权限限制对缓存的访问。如果配置缓存授权,您可以设置 < no-anonymous value=false /> 以允许匿名登录并将访问逻辑委派给缓存授权。
使用 SASL 策略配置的热 Rod 连接器
由于上述配置,Hot Rod 连接器使用 GSSAPI 机制,因为它是唯一适用于所有策略的机制。
4.3.3. 手动配置 REST 身份验证 复制链接链接已复制到粘贴板!
明确配置 REST 连接器身份验证,以覆盖 Data Grid 服务器用于安全域的默认 HTTP 身份验证机制。
流程
-
在 REST 连接器配置中添加
身份验证定义。 - 指定 REST 连接器用来进行身份验证的 Data Grid 安全域。
- 指定要使用的 REST 端点的身份验证机制。
4.3.3.1. REST 身份验证配置 复制链接链接已复制到粘贴板!
带有 BASIC 和 DIGEST 验证的 REST 连接器
带有 Kerberos 验证的 REST 连接器
4.3.3.2. REST 端点身份验证机制 复制链接链接已复制到粘贴板!
Data Grid 通过 REST 连接器支持以下验证机制:
| 身份验证机制 | 描述 | 相关详情 |
|---|---|---|
|
|
以纯文本格式使用凭据。您应该只使用带有加密连接的 |
对应于 |
|
|
使用哈希算法和非ce 值。REST 连接器支持 |
对应于 |
|
|
使用 Kerberos 票据并需要一个 Kerberos 域控制器。您必须在 realm 配置中添加对应的 |
对应于 |
|
|
使用 OAuth 令牌并需要一个 |
对应于 |
|
| 使用客户端证书。 |
与 |
4.4. 禁用 Data Grid 服务器身份验证 复制链接链接已复制到粘贴板!
在本地开发环境或隔离的网络中,您可以配置 Data Grid 服务器以允许未经身份验证的客户端请求。
流程
-
从端点配置中删除任何
security-realm属性。 -
确保 Hot Rod 和 REST 连接器不包含任何
身份验证定义。
例如,以下配置允许未经身份验证的对 Data Grid 的访问:
<endpoints socket-binding="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
<endpoints socket-binding="default">
<hotrod-connector name="hotrod"/>
<rest-connector name="rest"/>
</endpoints>
4.5. 配置数据网格授权 复制链接链接已复制到粘贴板!
授权限制了使用 Data Grid 和 access 数据执行操作的功能。您可以使用具有不同权限级别的角色分配用户。
4.5.1. Data Grid Authorization 复制链接链接已复制到粘贴板!
借助 Data Grid,您可以配置授权来保护缓存管理器和缓存实例。当用户应用程序或客户端试图对安全缓存管理器和缓存执行操作时,它们必须提供一个有足够权限的角色来执行该操作。
例如,您可以在特定的缓存实例上配置授权,以便调用 Cache.get () 需要分配具有 read 权限的角色,而 Cache.put () 需要具有写入权限的角色。
在这种情况下,如果具有 reader 角色的用户应用程序或客户端尝试编写条目,则 Data Grid 会拒绝请求并抛出安全异常。如果具有 writer 角色的用户应用程序或客户端发送写入请求,则数据网格会验证授权,并为后续操作发布令牌。
身份到角色映射
身份是类型为 java.security.Principal 的安全主体。使用 javax.security.auth.Subject 类实施的主题代表一组安全主体。换句话说,Subject 代表一个用户以及它所属的所有组。
Data Grid 使用角色映射器,以便安全主体与代表一个或多个权限的角色对应。
下图演示了安全主体如何映射到角色:
4.5.1.1. 权限 复制链接链接已复制到粘贴板!
通过限制您可以执行的操作来控制对缓存管理器和缓存的访问权限。权限也可以应用到指定缓存等特定实体。
| 权限 | 功能 | 描述 |
|---|---|---|
| 配置 |
| 定义新的缓存配置。 |
| LISTEN |
| 针对缓存管理器注册监听程序。 |
| 生命周期 |
| 停止缓存管理器。 |
| ALL | - | 包括所有缓存管理器权限。 |
| 权限 | 功能 | 描述 |
|---|---|---|
|
|
| 从缓存检索条目。 |
| 写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
| EXEC |
| 允许针对缓存执行代码。 |
| LISTEN |
| 针对缓存注册监听程序。 |
| BULK_READ |
| 执行批量检索操作。 |
| BULK_WRITE |
| 执行批量写入操作。 |
| 生命周期 |
| 启动和停止缓存。 |
| ADMIN |
| 允许访问底层组件和内部结构。 |
| ALL | - | 包括所有缓存权限。 |
| ALL_READ | - | 组合了 READ 和 BULK_READ 权限。 |
| ALL_WRITE | - | 组合 WRITE 和 BULK_WRITE 权限。 |
合并权限
您可能需要组合权限,以便它们很有用。例如,要允许"supervisors"运行流操作,但限制"标准"用户仅放置并获得,您可以定义以下映射:
<role name="standard" permission="READ WRITE" /> <role name="supervisors" permission="READ WRITE EXEC BULK"/>
<role name="standard" permission="READ WRITE" />
<role name="supervisors" permission="READ WRITE EXEC BULK"/>
4.5.1.2. 角色映射程序 复制链接链接已复制到粘贴板!
Data Grid 包括了一个 PrincipalRoleMapper API,它将 Subject 中的安全主体映射到授权角色。默认有两个角色映射器:
- IdentityRoleMapper
使用 Principal 名称作为角色名称。
-
Java class:
org.infinispan.security.mappers.IdentityRoleMapper -
声明性配置:<
;identity-role-mapper />
-
Java class:
- CommonNameRoleMapper
如果主体名称是可辨识名称(DN),则使用 Common Name (CN)作为角色名称。例如,
cn=managers,ou=people,dc=example,dc=comDN 映射到managers角色。-
Java class:
org.infinispan.security.mappers.CommonRoleMapper -
声明性配置: <
;common-name-role-mapper />
-
Java class:
您还可以使用实现 org.infinispan.security.PrincipalRoleMapper 接口的自定义角色映射程序。要以声明性方式配置自定义角色映射程序,请使用: < ;custom-role-mapper class="my.custom.RoleMapper" />
4.5.2. 声明性配置授权 复制链接链接已复制到粘贴板!
在 infinispan.xml 文件中配置授权。
流程
-
在
cache-container中配置全局授权设置,用于指定角色映射器,并定义一组角色和权限。 配置缓存授权,以根据用户角色限制访问权限。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不想将所有角色应用到缓存,请明确定义授权缓存的角色,如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义缓存的授权角色。在本例中,只有
writer角色的用户没有授权"secured"缓存。Data Grid 拒绝来自这些用户的任何访问请求。
第 5 章 设置 Data Grid 集群 复制链接链接已复制到粘贴板!
Data Grid 需要传输层,以便节点可以自动加入和离开集群。传输层还可让数据在网络间复制或分发数据,并执行操作,如重新平衡和状态传输。
5.1. 默认堆栈入门 复制链接链接已复制到粘贴板!
Data Grid 使用 JGroups 协议堆栈,以便节点可以在专用集群通道上发送其他消息。
Data Grid 为 UDP 和 TCP 协议提供预配置的 JGroups 堆栈。您可以使用这些默认堆栈作为构建自定义集群传输配置的起点,该配置根据您的网络要求进行了优化。
流程
在
infinispan-core-11.0.9.Final。-redhat-00001.jar文件的default-configs目录中找到默认的 JGroups 堆栈 default-jgroups-2022-3.xmljar文件位于$RHDG_HOME/lib目录中。执行以下操作之一:
使用
infinispan.xml文件中的stack属性。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
default-jgroups-udp.xml用于集群传输。
在启动服务器时使用
cluster-stack参数:bin/server.sh --cluster-stack=udp
$ bin/server.sh --cluster-stack=udpCopy 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
参考
- Data Grid 8.x 的 JGroups 集群传输配置 (红帽知识库文章)
5.1.1. 默认 JGroups Stacks 复制链接链接已复制到粘贴板!
了解配置集群传输的默认 JGroups 堆栈。
| 文件名 | 堆栈名称 | 描述 |
|---|---|---|
|
|
| 使用 UDP 进行传输和 UDP 多播进行发现。适用于较大的集群(超过 100 个节点),或者使用复制缓存或无效模式。最小化打开的插槽数量。 |
|
|
|
使用 TCP 传输和 |
|
|
|
使用 TCP 进行传输, |
|
|
|
使用 TCP 进行传输, |
|
|
|
使用 TCP 进行传输, |
|
|
|
使用 TCP 进行传输, |
参考
5.1.2. 集群流量的 TCP 和 UDP 端口 复制链接链接已复制到粘贴板!
Data Grid 对集群传输信息使用以下端口:
| 默认端口 | 协议 | 描述 |
|---|---|---|
|
| TCP/UDP | JGroups 集群绑定端口 |
|
| UDP | JGroups 多播 |
跨站点复制
Data Grid 为 JGroups RELAY2 协议使用以下端口:
7900- 对于在 OpenShift 上运行的 Data Grid 集群。
7800- 如果将 UDP 用于节点间的流量,使用 TCP 作为集群之间的流量。
7801- 如果将 TCP 用于节点和 TCP 间的流量,用于集群之间的流量。
5.2. 自定义 JGroups 堆栈 复制链接链接已复制到粘贴板!
调整和调优属性,以创建适合您的网络要求的集群传输配置。
Data Grid 提供可让您扩展默认 JGroups 堆栈以方便配置的属性。您可以在合并、删除和替换其他属性时从默认堆栈继承属性。
流程
在
infinispan.xml文件中创建一个新的 JGroups 堆栈声明。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建名为"my-stack"的自定义 JGroups 堆栈。
添加
extends属性,并指定 JGroups 堆栈来继承属性。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 从默认的 TCP 堆栈继承。
-
使用
stack.combine属性修改继承堆栈中配置的协议的属性。 使用
stack.position属性定义自定义堆栈的位置。例如,您可以使用 Gossip 路由器和使用默认 TCP 堆栈的对称加密来评估,如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定堆栈名称,作为
传输配置中stack属性的值。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 配置 Data Grid,以将 "my-stack" 用于集群传输。
检查 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 集群传输配置 (红帽知识库文章)
5.2.1. 继承属性 复制链接链接已复制到粘贴板!
当您扩展 JGroups 堆栈时,继承属性允许您调整您要扩展的堆栈中的协议和属性。
-
stack.position指定要修改的协议。 stack.combine使用以下值来扩展 JGroups 堆栈:Expand 值 描述 组合覆盖协议属性。
REPLACE替换协议。
INSERT_AFTER在另一个协议后将协议添加到堆栈中。不会影响指定为插入点的协议。
JGroups 堆栈中的协议会根据堆栈中的位置相互影响。例如,您应该在
SYM_ENCRYPT或ASYM_ENCRYPT协议后放置NAKACK2等协议,以便保护NAKACK2。删除从堆栈中删除协议。
5.3. 使用 JGroups 系统属性 复制链接链接已复制到粘贴板!
在启动时将系统属性传递给 Data Grid,以调优群集传输。
流程
-
根据需要,使用
-D<property-name>=<property-value> 参数设置 JGroups 系统属性。
例如,设置自定义绑定端口和 IP 地址,如下所示:
bin/server.sh -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
$ bin/server.sh -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
5.3.1. JGroups 堆栈的系统属性 复制链接链接已复制到粘贴板!
设置配置 JGroups 集群传输堆栈的系统属性。
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| 集群传输的绑定地址。 |
| 选填 |
|
| 套接字的绑定端口。 |
| 选填 |
|
| 用于多播的 IP 地址,包括发现和集群间通信。IP 地址必须是适合 IP 多播的有效"类 D"地址。 |
| 选填 |
|
| 多播套接字的端口。 |
| 选填 |
|
| IP 多播数据包的时间到时间(TTL)。该值定义数据包在丢弃前可以进行的网络跃点数。 | 2 | 选填 |
|
| 线程池的最小线程数量。 | 0 | 选填 |
|
| 线程池的最大线程数。 | 200 | 选填 |
|
| 等待加入请求成功的最大毫秒数。 | 2000 | 选填 |
|
| 在记录线程转储前,线程池需要满的次数。 | 10000 | 选填 |
Amazon EC3
以下系统属性只适用于 default-jgroups-ec2.xml :
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| S3 存储桶的 Amazon S3 访问密钥。 | 没有默认值。 | 选填 |
|
| 用于 S3 存储桶的 Amazon S3 secret 密钥。 | 没有默认值。 | 选填 |
|
| Amazon S3 存储桶的名称。名称必须存在,并且必须是唯一的。 | 没有默认值。 | 选填 |
Kubernetes
以下系统属性只适用于 default-jgroups-kubernetes.xml :
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| 设置返回群集成员的 DNS 记录。 | 没有默认值。 | 必需 |
Google Cloud Platform
以下系统属性只适用于 default-jgroups-google.xml :
| 系统属性 | 描述 | 默认值 | 必填/选填 |
|---|---|---|---|
|
| Google Compute Engine 存储桶的名称。名称必须存在,并且必须是唯一的。 | 没有默认值。 | 必需 |
5.4. 使用 Inline JGroups Stacks 复制链接链接已复制到粘贴板!
您可以将完整的 JGroups 堆栈定义插入到 infinispan.xml 文件中。
5.5. 使用外部 JGroups 堆栈 复制链接链接已复制到粘贴板!
引用在 infinispan.xml 文件中定义自定义 JGroups 堆栈的外部文件。
5.6. 集群发现协议 复制链接链接已复制到粘贴板!
Data Grid 支持不同的协议,允许节点在网络上自动找到并形成集群。
Data Grid 可以使用两种发现机制:
- 在大多数网络上工作且不依赖于外部服务的通用发现协议。
-
依赖于外部服务的发现协议来存储和检索 Data Grid 集群的拓扑信息。
例如,DNS_PING 协议通过 DNS 服务器记录执行发现。
在托管平台上运行 Data Grid 需要使用针对各个云提供商实施的网络限制的发现机制。
参考
5.6.1. PING 复制链接链接已复制到粘贴板!
PING 或 UDPPING 是一种通用 JGroups 发现机制,它使用 UDP 协议的动态多播。
加入后,节点将 PING 请求发送到 IP 多播地址,以发现已在 Data Grid 集群中的其他节点。每个节点通过包含协调器节点地址的数据包以及自己的地址来响应 PING 请求。C=coordinator 的地址和 A=own 地址。如果没有节点响应 PING 请求,则加入节点会成为新集群中的协调节点。
PING 配置示例
<config> <PING num_discovery_runs="3"/> ... </config>
<config>
<PING num_discovery_runs="3"/>
...
</config>
参考
5.6.2. TCPPING 复制链接链接已复制到粘贴板!
TCPPING 是一种通用 JGroups 发现机制,它对群集成员使用静态地址列表。
使用 TCPPING 时,您可以手动将 Data Grid 集群中每个节点的 IP 地址或主机名指定为 JGroups 堆栈的一部分,而不是让节点动态发现其他节点。
TCPPING 配置示例
- 1
- 为了可靠发现,红帽建议
端口范围=0。
5.6.3. MPING 复制链接链接已复制到粘贴板!
MPING 使用 IP 多播来发现 Data Grid 集群的初始成员资格。
您可以使用 MPING 将 TCPPING 发现替换为 TCP 堆栈,并使用 multicasing 进行发现,而不使用初始主机的静态列表。但是,您还可以将 MPING 与 UDP 堆栈一起使用。
MPING 配置示例
5.6.4. TCPGOSSIP 复制链接链接已复制到粘贴板!
gossip 路由器在网络上提供一个中央位置,用于您的数据网格集群可以检索其他节点的地址。
您可以将 Gossip 路由器的地址(IP:PORT)注入 Data Grid 节点,如下所示:
-
将 address 作为系统属性传递给 JVM;例如,
-DGossipRouterAddress="10.10.2.4[12001]"。 - 在 JGroups 配置文件中引用该系统属性。
gossip 路由器配置示例
5.6.5. JDBC_PING 复制链接链接已复制到粘贴板!
JDBC_PING 使用共享数据库存储数据网格集群的信息。此协议支持任何可以使用 JDBC 连接的数据库。
节点将其 IP 地址写入共享数据库,以便加入节点可以在网络上找到 Data Grid 集群。当节点离开 Data Grid 集群时,它们会从共享数据库中删除其 IP 地址。
JDBC_PING 配置示例
将适当的 JDBC 驱动程序添加到类路径中,以便 Data Grid 可以使用 JDBC_PING。
5.6.6. DNS_PING 复制链接链接已复制到粘贴板!
JGroups DNS_PING 查询 DNS 服务器,以便在 Kubernetes 环境中发现数据网格群集成员,如 OKD 和 Red Hat OpenShift。
DNS_PING 配置示例
<config> <dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" /> ... </config>
<config>
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
...
</config>
参考
- JGroups DNS_PING
- 服务和 Pod 的 DNS (Kubernetes 文档来添加 DNS 条目)
5.7. 加密集群传输 复制链接链接已复制到粘贴板!
保护集群传输,以便节点与加密消息通信。您还可以配置 Data Grid 集群来执行证书身份验证,以便只有具有有效身份的节点才能加入。
5.7.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 密钥。
5.7.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 - 1
- 创建名为"encrypt-tcp"的安全 JGroups 堆栈,用于扩展 Data Grid 的默认 TCP 堆栈。
- 2
- 将节点用来执行证书身份验证的密钥存储命名。
- 3
- 指定密钥存储密码。
- 4
- 使用
stack.combine和stack.position属性在VERIFY_SUSPECT协议后将SSL_KEY_EXCHANGE插入到默认的 TCP 堆栈中。 - 5
- 指定协调器节点生成的 secret 密钥长度。默认值为
2048。 - 6
- 指定 coordinator 节点用来生成 secret 密钥的密码引擎。默认值为
RSA。 - 7
- 配置 Data Grid,以在协调器节点更改时生成并分发新的 secret 密钥。
- 8
- 配置 Data Grid,以在节点离开时生成和分发新的 secret 密钥。
- 9
- 配置 Data Grid 节点,以使用
SSL_KEY_EXCHANGE协议进行证书身份验证。 - 10
- 使用
stack.combine和stack.position属性在SSL_KEY_EXCHANGE协议后将ASYM_ENCRYPT插入默认的 TCP 堆栈。 - 11
- 配置 Data Grid 集群,以使用 secure 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>
只有在它们使用 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 文档。
5.7.3. 使用 Symmetric 加密配置集群传输 复制链接链接已复制到粘贴板!
配置 Data Grid 集群,以使用您提供的密钥存储中的 secret 密钥加密 JGroups 消息。
流程
- 创建包含 secret 密钥的密钥存储。
将密钥存储放在集群中每个节点的 classpath 上。
对于 Data Grid Server,您要将密钥存储放在 $RHDG_HOME 目录中。
将
SYM_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>
只有在使用 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 章 远程创建数据网格缓存 复制链接链接已复制到粘贴板!
将缓存添加到 Data Grid 服务器,以便您可以存储数据。
6.1. 使用 Data Grid Server 进行缓存配置 复制链接链接已复制到粘贴板!
缓存在 Data Grid 服务器上配置数据容器。
您可以通过控制台、命令行界面(CLI)、Hot Rod 端点或 REST 端点添加基于 org.infinispan 模板或 Data Grid 配置的定义在运行时创建缓存。
当您在运行时创建缓存时,Data Grid 服务器在集群中复制缓存定义。
您直接在 infinispan.xml 中声明的配置不会在 Data Grid 集群中自动同步。在这种情况下,您应该使用 Ansible 或 Chef 等配置来将配置传播到集群中的所有节点。
6.2. 默认缓存管理器 复制链接链接已复制到粘贴板!
Data Grid Server 提供默认的缓存管理器配置。当您启动 Data Grid Server 时,它会实例化 Cache Manager,以便您可以在运行时远程创建缓存。
默认缓存管理器
检查缓存管理器
启动 Data Grid Server 并添加用户凭证后,您可以通过命令行界面(CLI)或 REST 端点访问默认的缓存管理器,如下所示:
CLI:在默认容器中使用
describe命令。[//containers/default]> describe
[//containers/default]> describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
rest: 在任何浏览器中导航到
<server_hostname>:11222/rest/v2/cache-managers/default/。
6.3. 使用 Data Grid 控制台创建缓存 复制链接链接已复制到粘贴板!
通过 Data Grid 控制台从模板或配置文件动态添加缓存。
前提条件
创建用户,并至少启动一个 Data Grid 服务器实例。
流程
-
在任何浏览器中导航到
<server_hostname>:11222/console/。 - 登录到控制台。
- 打开 Data Container 视图。
- 选择 Create Cache,然后从模板或以 XML 或 JSON 格式使用 Data Grid 配置添加缓存。
- 返回到 Data Container 视图,并验证您的 Data Grid 缓存。
6.4. 使用 Data Grid Command Line Interface (CLI)创建缓存 复制链接链接已复制到粘贴板!
使用 Data Grid CLI 以 XML 或 JSON 格式从模板或配置文件添加缓存。
前提条件
创建用户,并至少启动一个 Data Grid 服务器实例。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
create cache命令添加缓存定义。使用
--file选项,从 XML 或 JSON 文件添加缓存定义。[//containers/default]> create cache --file=configuration.xml mycache
[//containers/default]> create cache --file=configuration.xml mycacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--template选项从模板创建缓存定义。[//containers/default]> create cache --template=org.infinispan.DIST_SYNC mycache
[//containers/default]> create cache --template=org.infinispan.DIST_SYNC mycacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示在
--template=参数后按 tab 键以列出可用的缓存模板。
使用
ls命令验证缓存是否存在。[//containers/default]> ls caches mycache
[//containers/default]> ls caches mycacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
describe命令检索缓存配置。[//containers/default]> describe caches/mycache
[//containers/default]> describe caches/mycacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5. 使用 Hot Rod 客户端创建缓存 复制链接链接已复制到粘贴板!
通过 RemoteCacheManager API 在 Data Grid Server 上以编程方式创建缓存。
以下流程演示了使用 Hot Rod Java 客户端进行编程缓存创建。但是,Hot Rod 客户端以 Javascript 或 C++ 等不同语言提供。
前提条件
- 创建用户,并至少启动一个 Data Grid 服务器实例。
- 获取 Hot Rod Java 客户端。
流程
使用
ConfigurationBuilder类配置您的客户端。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
XMLStringConfiguration类以 XML 格式添加缓存定义。 调用
getOrCreateCache ()方法,以添加缓存(如果已存在)或创建缓存(如果不存在)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
org.infinispan模板创建缓存,如下例所示,使用createCache ()调用:private void createCacheWithTemplate() { manager.administration().createCache("myCache", "org.infinispan.DIST_SYNC"); System.out.println("Cache created."); }private void createCacheWithTemplate() { manager.administration().createCache("myCache", "org.infinispan.DIST_SYNC"); System.out.println("Cache created."); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
尝试一些工作代码示例,其中演示了如何使用 Hot Rod Java 客户端创建远程缓存。访问 Data Grid Tutorials。
6.6. 使用 HTTP 客户端创建数据网格缓存 复制链接链接已复制到粘贴板!
使用任何合适的 HTTP 客户端通过 REST 端点向 Data Grid 服务器添加缓存定义。
前提条件
创建用户,并至少启动一个 Data Grid 服务器实例。
流程
-
使用
POST请求到/rest/v2/caches/$cacheName创建缓存。
通过在请求有效负载中包含 XML 或 JSON 配置。
POST /rest/v2/caches/mycache
POST /rest/v2/caches/mycache
使用 ?template= 参数从 org.infinispan 模板创建缓存。
POST /rest/v2/caches/mycache?template=org.infinispan.DIST_SYNC
POST /rest/v2/caches/mycache?template=org.infinispan.DIST_SYNC
6.7. Data Grid 配置 复制链接链接已复制到粘贴板!
以 XML 和 JSON 格式进行数据网格配置。
6.7.1. XML 配置 复制链接链接已复制到粘贴板!
XML 格式的数据网格配置必须符合架构并包括:
-
<Infinispan> root 元素。 -
<cache-container> 定义。
XML 配置示例
6.7.2. JSON 配置 复制链接链接已复制到粘贴板!
以 JSON 格式的数据网格配置:
- 仅要求缓存定义。
必须遵循 XML 配置的结构。
- XML 元素成为 JSON 对象。
- XML 属性成为 JSON 字段。
JSON 配置示例
第 7 章 配置 Data Grid Server Datasources 复制链接链接已复制到粘贴板!
创建受管数据源,以优化数据库连接的连接池和性能。
您可以将数据库连接属性指定为 JDBC 缓存存储配置的一部分。但是,您必须为每个缓存定义执行此操作,通过创建多个不同的连接池来重复配置并浪费资源。
通过使用共享、管理的数据源,您可以集中连接配置和池,以便更有效地使用。
7.1. JDBC 缓存存储的数据源配置 复制链接链接已复制到粘贴板!
数据源的数据网格服务器配置由两个部分组成:
-
定义如何连接到数据库的
连接工厂。 -
定义如何池和重复利用连接的连接池。
- 1
- 定义数据源名称、JNDI 名称,以及是否启用统计集合。
- 2
- 指定创建连接的 JDBC 驱动程序。将驱动程序 JAR 放在
server/lib目录中。 - 3
- 指定连接的用户名。
- 4
- 为连接指定对应的密码。
- 5
- 指定特定于正在使用的驱动程序的 JDBC URL。
- 6
- 添加验证新连接的查询。
- 7
- 为连接配置其中一个事务隔离级别:
NONE、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIZABLE. - 8
- 设置可选的 JDBC 驱动程序的连接属性。
- 9
- 定义池包含的初始连接数。
- 10
- 设置池中连接的最大数量。
- 11
- 设置池应包含的最小连接数。
- 12
- 指定后台验证运行之间的时间(以毫秒为单位)。
- 13
- 指定连接被删除前可以保持闲置的时间(以分钟为单位)。
- 14
- 指定在等待连接时阻止的时间(以毫秒为单位),在等待连接后抛出异常。
- 15
- 指定在发生泄漏警告前可以保存连接的时间(以毫秒为单位)。
7.2. 在 JDBC Cache Stores 中使用 Datasources 复制链接链接已复制到粘贴板!
在 JDBC 缓存存储配置中使用共享管理的数据源,而不是为每个缓存定义指定单独的连接属性。
前提条件
在您的 Data Grid 服务器配置中为 JDBC 缓存存储创建一个受管数据源。
流程
- 在缓存配置的 JDBC 缓存存储配置中引用数据源的 JNDI 名称,如下例所示:
- 1
- 指定您为 Data Grid 服务器配置中数据源连接提供的 JNDI 名称。
第 8 章 远程执行服务器侧任务 复制链接链接已复制到粘贴板!
定义并添加可从 Data Grid 命令行界面、REST API 或 Hot Rod 客户端调用的 Data Grid 服务器的任务。
您可以将任务实施为自定义 Java 类,也可以使用 JavaScript 等语言定义脚本。
8.1. 创建服务器任务 复制链接链接已复制到粘贴板!
创建自定义任务实施,并将它们添加到 Data Grid 服务器中。
8.1.1. 服务器任务 复制链接链接已复制到粘贴板!
Data Grid 服务器任务是扩展 org.infinispan.tasks.ServerTask 接口且通常包括以下方法调用的类:
setTaskContext()- 允许访问执行上下文信息,包括任务参数、对执行任务的缓存引用,等等。在大多数情况下,实施将此信息存储在本地,并在实际执行任务时使用这些信息。
getName()- 返回任务的唯一名称。客户端使用这些名称调用任务。
getExecutionMode()返回任务的执行模式。
-
TaskExecutionMode.ONE_NODE仅处理请求的节点执行该脚本。虽然脚本仍然可以调用集群操作。 -
TaskExecutionMode.ALL_NODESData Grid 使用集群 executors 在节点间运行脚本。例如,需要在单个节点上执行调用流处理的服务器任务,因为流处理被分发到所有节点。
-
call()-
计算结果。此方法在
java.util.concurrent.Callable接口中定义,并通过服务器任务调用。
服务器任务实施必须遵循服务加载程序模式要求。例如,实施必须具有零参数构造器。
以下 HelloTask 类实现提供了一个示例任务,它有一个参数:
8.1.2. 在 Data Grid 服务器中部署服务器任务 复制链接链接已复制到粘贴板!
将自定义服务器任务类添加到 Data Grid 服务器。
前提条件
停止任何正在运行的 Data Grid 服务器。Data Grid 不支持自定义类的运行时部署。
流程
- 将服务器任务实施打包在 JAR 文件中。
添加
META-INF/services/org.infinispan.tasks.ServerTask文件,其中包含服务器任务的完全限定域名,例如:example.HelloTask
example.HelloTaskCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 JAR 文件复制到 Data Grid 服务器的
$RHDG_HOME/server/lib目录中。 - 将您的类添加到 Data Grid 配置中的 deserialization whitelist 中。或者,使用系统属性设置白名单。
8.2. 创建服务器脚本 复制链接链接已复制到粘贴板!
创建自定义脚本并将其添加到 Data Grid 服务器中。
8.2.1. 服务器脚本 复制链接链接已复制到粘贴板!
Data Grid 服务器脚本基于 javax.script API,兼容任何基于 JVM 的 ScriptEngine 实施。
hello World 脚本示例
以下是在单个 Data Grid 服务器上运行的简单示例,具有一个参数,并使用 JavaScript:
// mode=local,language=javascript,parameters=[greetee] "Hello " + greetee
// mode=local,language=javascript,parameters=[greetee]
"Hello " + greetee
运行前面的脚本时,您将传递 greetee 参数的值,Data Grid 返回 "Hello ${value}"。
8.2.1.1. 脚本元数据 复制链接链接已复制到粘贴板!
元数据提供有关在运行脚本时数据网格服务器使用的脚本的附加信息。
脚本元数据是添加到脚本第一行中的注释的 property=value 对,如下例所示:
// name=test, language=javascript // mode=local, parameters=[a,b,c]
// name=test, language=javascript
// mode=local, parameters=[a,b,c]
-
使用与脚本语言(
//、;;,#)匹配的注释样式。 -
使用逗号分隔
property=value对。 - 使用单引号(')或双引号(")分隔值。
| 属性 | 描述 |
|---|---|
|
| 定义 exection 模式,并具有以下值:
|
|
| 指定执行脚本的 ScriptEngine。 |
|
| 指定文件名扩展作为设置 ScriptEngine 的替代方法。 |
|
| 指定用户必须执行脚本的角色。 |
|
| 指定此脚本的有效参数名称数组。指定此列表中不包含的参数的调用会导致异常。 |
|
| (可选)设置用于存储数据的 MediaType (MIME 类型),以及参数和返回值。此属性仅适用于仅支持特定数据格式的远程客户端。
目前,您只能设置 |
8.2.1.2. 脚本绑定 复制链接链接已复制到粘贴板!
Data Grid 将内部对象公开为脚本执行的绑定。
| 绑定 | 描述 |
|---|---|
|
| 指定运行脚本的缓存。 |
|
| 指定用于将数据序列化到缓存的 marshaller。 |
|
|
指定缓存的 |
|
| 指定运行脚本的脚本管理器的实例。您可以使用此绑定从脚本运行其他脚本。 |
8.2.1.3. 脚本参数 复制链接链接已复制到粘贴板!
借助 Data Grid,您可以将命名参数作为运行脚本的绑定传递。
参数是 name,value 对,其中 name 是字符串,value 是 marshaller 可以解释的任何值。
以下示例脚本有两个参数,即 multiplicand 和 multiplier。脚本采用 multiplicand 的值,并将该值乘以 倍数。
// mode=local,language=javascript multiplicand * multiplier
// mode=local,language=javascript
multiplicand * multiplier
运行前面的脚本时,Data Grid 会以表达式评估的结果进行响应。
8.2.2. 将脚本添加到 Data Grid 服务器 复制链接链接已复制到粘贴板!
使用命令行界面向 Data Grid 服务器添加脚本。
前提条件
Data Grid 服务器将脚本存储在 ___script_cache 缓存中。如果您启用缓存授权,用户需要 ___script_manager 角色来访问 ___script_cache。
流程
根据需要定义脚本。
例如,创建一个名为
multiplication.js的文件,该文件在单一 Data Grid 服务器上运行,有两个参数,并使用 JavaScript 来多次使用给定值:// mode=local,language=javascript multiplicand * multiplier
// mode=local,language=javascript multiplicand * multiplierCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建与 Data Grid 的 CLI 连接。
使用
task命令上传脚本,如下例所示:[//containers/default]> task upload --file=multiplication.js multiplication
[//containers/default]> task upload --file=multiplication.js multiplicationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您的脚本是否可用。
[//containers/default]> ls tasks multiplication
[//containers/default]> ls tasks multiplicationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2.3. 以编程方式创建脚本 复制链接链接已复制到粘贴板!
使用 Hot Rod RemoteCache 接口添加脚本,如下例所示:
RemoteCache<String, String> scriptCache = cacheManager.getCache("___script_cache");
scriptCache.put("multiplication.js",
"// mode=local,language=javascript\n" +
"multiplicand * multiplier\n");
RemoteCache<String, String> scriptCache = cacheManager.getCache("___script_cache");
scriptCache.put("multiplication.js",
"// mode=local,language=javascript\n" +
"multiplicand * multiplier\n");
8.3. 运行服务器端任务和脚本 复制链接链接已复制到粘贴板!
在 Data Grid 服务器上执行任务和自定义脚本。
8.3.1. 运行任务和脚本 复制链接链接已复制到粘贴板!
使用命令行界面在 Data Grid 集群中运行的任务和脚本。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
task命令运行任务和脚本,如下例所示:执行名为
multipler.js的脚本并指定两个参数:[//containers/default]> task exec multipler.js -Pmultiplicand=10 -Pmultiplier=20 200.0
[//containers/default]> task exec multipler.js -Pmultiplicand=10 -Pmultiplier=20 200.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行名为
@@cache@names的任务,以检索所有可用缓存的列表://containers/default]> task exec @@cache@names ["___protobuf_metadata","mycache","___script_cache"]
//containers/default]> task exec @@cache@names ["___protobuf_metadata","mycache","___script_cache"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.2. 以编程方式运行脚本 复制链接链接已复制到粘贴板!
调用 execute () 方法以使用 Hot Rod RemoteCache 接口运行脚本,如下例所示:
8.3.3. 以编程方式运行任务 复制链接链接已复制到粘贴板!
调用 execute () 方法以使用 Hot Rod RemoteCache 接口运行任务,如下例所示:
第 9 章 监控数据网格服务器 复制链接链接已复制到粘贴板!
9.1. 使用 Data Grid 服务器日志 复制链接链接已复制到粘贴板!
Data Grid 使用 Apache Log4j 2 提供可配置的日志机制,用于捕获环境和记录缓存操作的详细信息,以进行故障排除和根本原因分析。
9.1.1. Data Grid 日志文件 复制链接链接已复制到粘贴板!
Data Grid 将日志消息写入以下目录:$RHDG_HOME/${infinispan.server.root}/log
server.log-
以人类可读格式的消息,包括与服务器启动相关的引导日志。
在启动服务器时,Data Grid 默认创建此文件。 server.log.json-
JSON 格式的消息,允许您解析和分析 Data Grid 日志。
在启用JSON-FILE附加程序时,Data Grid 会创建此文件。
9.1.2. 配置数据网格日志属性 复制链接链接已复制到粘贴板!
您可以使用 log4j2.xml 配置 Data Grid 日志,该日志在 Log4j 2 manual 中进行了描述。
流程
-
使用任何文本编辑器打开
$RHDG_HOME/${infinispan.server.root}/conf/log4j2.xml。 - 根据需要更改日志记录配置。
-
保存并关闭
log4j2.xml。
9.1.2.1. 日志级别 复制链接链接已复制到粘贴板!
日志级别表示消息的性质和严重性。
| 日志级别 | 描述 |
|---|---|
|
| 细粒度调试消息,通过应用程序捕获单个请求的流。 |
|
| 常规调试消息,与单个请求无关。 |
|
| 有关应用程序整体进度的消息,包括生命周期事件。 |
|
| 可能导致错误或降低性能的事件。 |
|
| 可能会阻止操作或激活成功但不会阻止应用程序运行的错误条件。 |
|
| 可能导致关键服务失败和应用程序关闭的事件。 |
除了上面提供的单个消息级别外,配置还允许另外两个值: ALL 包含所有消息,OFF 排除所有消息。
9.1.2.2. Data Grid Log Categories 复制链接链接已复制到粘贴板!
Data Grid 为 INFO,WARN,ERROR,FATAL 级别提供按功能区域组织日志的类别。
org.infinispan.CLUSTER- 特定于 Data Grid 集群的消息,其中包括状态传输操作、重新平衡事件、分区等。
org.infinispan.CONFIG- 特定于 Data Grid 配置的消息。
org.infinispan.CONTAINER- 特定于过期和驱除操作的数据容器、缓存侦听器通知、事务等。
org.infinispan.PERSISTENCE- 特定于缓存加载程序和存储的消息。
org.infinispan.SECURITY- 特定于 Data Grid 安全性的消息。
org.infinispan.SERVER- 特定于 Data Grid 服务器的消息。
org.infinispan.XSITE- 特定于跨站点复制操作的消息。
9.1.2.3. 日志应用程序 复制链接链接已复制到粘贴板!
日志附加程序定义 Data Grid 记录日志消息的方式。
- 控制台
-
将日志消息写入主机标准输出(
stdout)或标准错误(stderr)流。
默认使用org.apache.logging.log4j.core.appender.ConsoleAppender类。 - FILE
-
将日志消息写入文件。
默认使用org.apache.logging.log4j.core.appender.RollingFileAppender类。 - JSON-FILE
-
将日志消息写入 JSON 格式的文件。
默认使用org.apache.logging.log4j.core.appender.RollingFileAppender类。
9.1.2.4. 日志模式 复制链接链接已复制到粘贴板!
CONSOLE 和 FILE 附加程序使用 PatternLayout 来根据 模式 格式化日志消息。
例如,FILE appender 中的默认模式:%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%t)[%c Array] %m%throwable%n
-
%d{yyyy-MM-dd HH:mm:ss,SSS}添加当前时间和日期。 -
%-5p指定日志级别,与右侧一致。 -
%T 添加当前线程的名称。 -
%c consumption添加日志记录类别的短名称。 -
%M 添加日志消息。 -
%throwable添加异常堆栈追踪。 -
%n添加新行。
PatternLayout 文档 完全描述了模式。
9.1.2.5. 启用并配置 JSON 日志处理程序 复制链接链接已复制到粘贴板!
Data Grid 提供了一个 JSON 日志处理程序,以 JSON 格式写入消息。
前提条件
确保 Data Grid 未在运行。您无法动态启用日志处理程序。
流程
-
使用任何文本编辑器打开
$RHDG_HOME/${infinispan.server.root}/conf/log4j2.xml。 取消注释
JSON-FILE附加程序并注释掉FILE附加器:<!--<AppenderRef ref="FILE"/>--> <AppenderRef ref="JSON-FILE"/><!--<AppenderRef ref="FILE"/>--> <AppenderRef ref="JSON-FILE"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - (可选)配置 JSON 附加器 和布局。
-
保存并关闭
logging.properties。
当您启动 Data Grid 时,它会在以下文件中将每个日志消息写为 JSON 映射:$RHDG_HOME/${infinispan.server.root}/log/server.log.json
9.1.3. 访问日志 复制链接链接已复制到粘贴板!
热 Rod 和 REST 端点可使用以下类别将所有入站客户端请求记录为日志条目:
-
org.infinispan.HOTROD_ACCESS_LOG日志记录类别用于 Hot Rod 端点。 -
org.infinispan.REST_ACCESS_LOG日志记录类别用于 REST 端点。
9.1.3.1. 启用访问日志 复制链接链接已复制到粘贴板!
默认情况下,禁用 Hot Rod 和 REST 端点的访问日志。要启用任一日志记录类别,请在 Data Grid 日志记录配置中将级别设置为 TRACE,如下例所示:
<Logger name="org.infinispan.HOTROD_ACCESS_LOG" additivity="false" level="TRACE"> <AppenderRef ref="HR-ACCESS-FILE"/> </Logger>
<Logger name="org.infinispan.HOTROD_ACCESS_LOG" additivity="false" level="TRACE">
<AppenderRef ref="HR-ACCESS-FILE"/>
</Logger>
9.1.3.2. 访问日志属性 复制链接链接已复制到粘贴板!
访问日志的默认格式如下:
%X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}] "%X{method} %m
%X{protocol}" %X{status} %X{requestSize} %X{responseSize} %X{duration}%n
%X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}] "%X{method} %m
%X{protocol}" %X{status} %X{requestSize} %X{responseSize} %X{duration}%n
以上格式会创建日志条目,如下所示:
127.0.0.1 - [DD/MM/YYYY:HH:MM:SS +0000] "PUT /rest/v2/caches/default/key HTTP/1.1" 404 5 77 10
日志记录属性使用 %X{name} 表示法,并允许您修改访问日志的格式。以下是默认的日志记录属性:
| 属性 | 描述 |
|---|---|
|
|
|
|
| 主体名称,如果使用身份验证。 |
|
|
使用的方法。 |
|
|
使用的协议。 |
|
|
REST 端点的 HTTP 状态代码。Hot Rod 端点的 |
|
| 请求的大小,以字节为单位。 |
|
| 响应的大小(以字节为单位)。 |
|
| 服务器处理请求的毫秒数。 |
使用前缀为 h: 的标头名称来记录请求中包含的标头;例如: %X{h:User-Agent}。
9.2. 配置统计、指标和 JMX 复制链接链接已复制到粘贴板!
启用数据网格导出到 MicroProfile 指标端点或通过 JMX MBeans 统计信息。您还可以注册 JMX MBeans 来执行管理操作。
9.2.1. 启用 Data Grid Statistics 复制链接链接已复制到粘贴板!
借助 Data Grid,您可以为缓存管理器和缓存启用统计信息。但是,为缓存管理器启用统计信息不会为其控制的缓存启用统计信息。您必须明确启用缓存的统计信息。
默认情况下,Data Grid 服务器为缓存管理器启用统计信息。
流程
- 以声明性方式或以编程方式启用统计信息。
声明性
<cache-container statistics="true"> <local-cache name="mycache" statistics="true"/> </cache-container>
<cache-container statistics="true">
<local-cache name="mycache" statistics="true"/>
</cache-container>
以编程方式
9.2.2. 启用 Data Grid Metrics 复制链接链接已复制到粘贴板!
配置 Data Grid 以导出量表和直方图。
流程
- 以声明性方式或以编程方式配置指标。
声明性
<cache-container statistics="true"> <metrics gauges="true" histograms="true" /> </cache-container>
<cache-container statistics="true">
<metrics gauges="true" histograms="true" />
</cache-container>
以编程方式
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .statistics().enable() .metrics().gauges(true).histograms(true) .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.statistics().enable()
.metrics().gauges(true).histograms(true)
.build();
9.2.3. 收集数据网格指标 复制链接链接已复制到粘贴板!
使用 Prometheus 等监控工具来收集数据网格指标。
前提条件
-
启用统计信息。如果没有启用统计信息,Data Grid 为指标提供
0和-1值。 - (可选)启用直方图。默认情况下,Data Grid 生成量表,但不生成直方图。
流程
获取 Prometheus (OpenMetrics)格式的指标:
curl -v http://localhost:11222/metrics
$ curl -v http://localhost:11222/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 MicroProfile JSON 格式获取指标:
curl --header "Accept: application/json" http://localhost:11222/metrics
$ curl --header "Accept: application/json" http://localhost:11222/metricsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
配置监控应用程序以收集数据网格指标。例如,将以下内容添加到 prometheus.yml 中:
static_configs:
- targets: ['localhost:11222']
static_configs:
- targets: ['localhost:11222']
参考
- Prometheus 配置
- 启用 Data Grid Statistics
9.2.4. 配置数据网格以注册 JMX MBeans 复制链接链接已复制到粘贴板!
Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。但是,您必须将统计信息单独启用到 JMX,否则 Data Grid 都为所有统计属性提供 0 值。
流程
- 以声明性方式或以编程方式启用 JMX。
声明性
<cache-container> <jmx enabled="true" /> </cache-container>
<cache-container>
<jmx enabled="true" />
</cache-container>
- 1
- 注册数据网格 JMX MBeans.
以编程方式
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .jmx().enable() .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
- 1
- 注册数据网格 JMX MBeans.
9.2.4.1. Data Grid MBeans 复制链接链接已复制到粘贴板!
Data Grid 公开了代表可管理资源的 JMX MBeans。
org.infinispan:type=Cache- 可用于缓存实例的属性和操作。
org.infinispan:type=CacheManager- 可用于缓存管理器的属性和操作,包括数据网格缓存和集群健康统计信息。
有关可用 JMX MBeans 的完整列表以及描述和可用的操作和属性,请参阅 Data Grid JMX 组件 文档。
9.3. 检索服务器健康统计 复制链接链接已复制到粘贴板!
使用以下方法监控 Data Grid 集群的健康状态:
-
使用
embeddedCacheManager.getHealth ()方法调用进行编程。 - JMX MBeans
- Data Grid REST Server
9.3.1. 通过 JMX 访问 Health API 复制链接链接已复制到粘贴板!
通过 JMX 检索 Data Grid 集群健康统计信息。
流程
使用任何 JMX 功能工具(如 JConsole)连接到 Data Grid 服务器,并导航到以下对象:
org.infinispan:type=CacheManager,name="default",component=CacheContainerHealth
org.infinispan:type=CacheManager,name="default",component=CacheContainerHealthCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 选择可用的 MBeans 来检索集群运行状况统计。
9.3.2. 通过 REST 访问 Health API 复制链接链接已复制到粘贴板!
通过 REST API 获取 Data Grid 集群健康状况。
流程
调用
GET请求以检索集群健康状况。GET /rest/v2/cache-managers/{cacheManagerName}/healthGET /rest/v2/cache-managers/{cacheManagerName}/healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Data Grid 使用 JSON 文档响应,如下所示:
获取缓存管理器状态,如下所示:
GET /rest/v2/cache-managers/{cacheManagerName}/health/status
GET /rest/v2/cache-managers/{cacheManagerName}/health/status
参考
如需更多信息,请参阅 REST v2 (版本 2)API 文档。
第 10 章 为 Data Grid 服务器执行滚动升级 复制链接链接已复制到粘贴板!
执行数据网格集群的滚动升级,以便在版本之间更改,而不会停机或数据丢失。滚动升级通过 Hot Rod 将您的数据同时迁移到目标版本。
10.1. 设置目标集群 复制链接链接已复制到粘贴板!
创建一个运行目标 Data Grid 版本的集群,并使用远程缓存存储从源集群加载数据。
前提条件
- 使用目标升级版本安装 Data Grid 集群。
确保目标集群的网络属性不会与源集群的网络属性重叠。您应该在 JGroups 传输配置中为目标和源集群指定唯一名称。根据您的环境,您还可以使用不同的网络接口并指定端口偏移来保持目标和源集群分开。
流程
在目标集群上为您要从源集群迁移的每个缓存添加一个
RemoteCacheStore。远程缓存存储使用 Hot Rod 协议从远程网格集群检索数据。将远程缓存存储添加到目标集群时,它可以从源集群中完全加载数据来处理客户端请求。
将客户端切换到目标集群,以便它开始处理所有请求。
- 使用目标集群的位置更新客户端配置。
- 重新启动客户端。
10.1.1. Rolling 升级的远程缓存存储 复制链接链接已复制到粘贴板!
您必须使用特定的远程缓存存储配置来执行滚动升级,如下所示:
10.2. 将数据同步到目标集群 复制链接链接已复制到粘贴板!
当目标集群正在运行并处理使用远程缓存存储的客户端请求时,您可以按需加载数据,您可以将源集群的数据同步到目标集群。
此操作从源集群读取数据并将其写入目标集群。数据会并行迁移到目标集群中的所有节点,每个节点都接收数据的子集。您必须在 Data Grid 配置中为每个缓存执行同步。
流程
在您要迁移到目标集群的数据网格配置中启动每个缓存的同步操作。
使用 Data Grid REST API,并通过
?action=sync- data参数调用POST请求。例如,要将名为"myCache"的数据从源集群同步到目标集群,请执行以下操作:POST /v2/caches/myCache?action=sync-data
POST /v2/caches/myCache?action=sync-dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当操作完成后,Data Grid 使用复制到目标集群的条目总数进行响应。
或者,您可以通过在
RollingUpgradeManagerMBean 上调用synchronizeData (migratorName=hotrod)来使用 JMX。断开目标集群中的每个节点与源集群的连接。
例如,要从源集群断开"myCache"缓存,请调用以下
POST请求:POST /v2/caches/myCache?action=disconnect-source
POST /v2/caches/myCache?action=disconnect-sourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 JMX,请在
RollingUpgradeManagerMBean 上调用disconnectSource (migratorName=hotrod)。
后续步骤
同步源集群中的所有数据后,滚动升级过程已完成。现在,您可以停用源集群。
第 11 章 Data Grid Servers 故障排除 复制链接链接已复制到粘贴板!
收集 Data Grid 服务器部署的诊断信息,并执行故障排除步骤以解决问题。
11.1. 获取 Data Grid 服务器的诊断报告 复制链接链接已复制到粘贴板!
Data Grid 服务器在 tar.gz 存档中提供聚合报告,其中包含有关 Data Grid 服务器和主机的诊断信息。除了配置和日志文件外,该报告还提供有关 CPU、内存、打开文件、网络套接字和路由线程的详细信息。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
server report命令下载tar.gz归档:[//containers/default]> server report Downloaded report 'infinispan-<hostname>-<timestamp>-report.tar.gz'
[//containers/default]> server report Downloaded report 'infinispan-<hostname>-<timestamp>-report.tar.gz'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
tar.gz文件移动到您文件系统中合适的位置。 -
使用任何归档工具提取
tar.gz文件。
11.2. 在运行时更改 Data Grid Server Logging 配置 复制链接链接已复制到粘贴板!
在运行时修改 Data Grid 服务器的日志记录配置,以临时调整日志记录来排除问题并执行根本原因分析。
通过 CLI 修改日志记录配置是一种运行时操作,这意味着更改:
-
不会保存到
log4j2.xml文件中。重启服务器节点或整个集群会将日志记录配置重置为log4j2.xml文件中的默认属性。 - 仅在调用 CLI 时应用到集群中的节点。更改日志记录配置后加入集群的节点使用默认属性。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
日志记录进行所需的调整。- 列出服务器中定义的所有附加程序:
[//containers/default]> logging list-appenders
[//containers/default]> logging list-appenders
前面的命令返回:
- 列出服务器上定义的所有日志记录器配置:
[//containers/default]> logging list-loggers
[//containers/default]> logging list-loggers
前面的命令返回:
-
使用
set子命令添加和修改日志记录器配置
例如,以下命令将 org.infinispan 软件包的日志级别设置为 DEBUG :
[//containers/default]> logging set --level=DEBUG org.infinispan
[//containers/default]> logging set --level=DEBUG org.infinispan
-
使用
remove子命令删除现有日志记录器配置。
例如,以下命令会删除 org.infinispan logger 配置,这意味着改为使用 root 配置:
[//containers/default]> logging remove org.infinispan
[//containers/default]> logging remove org.infinispan
11.3. 资源统计 复制链接链接已复制到粘贴板!
您可以使用 stats 命令检查 Data Grid 服务器中的某些资源的 server-collected 统计信息。
从收集统计信息(容器、缓存)的资源上下文中使用 stats 命令,或使用指向此类资源的路径:
第 12 章 参考 复制链接链接已复制到粘贴板!
12.1. Data Grid Server 8.1.1 Readme 复制链接链接已复制到粘贴板!
有关 Data Grid Server 11.0.9.Final-redhat-00001 发行版的信息。
12.1.1. 要求 复制链接链接已复制到粘贴板!
Data Grid Server 需要 JDK 11 或更高版本。
12.1.2. 启动服务器 复制链接链接已复制到粘贴板!
使用 服务器 脚本运行 Data Grid 服务器实例。
Unix / Linux
$RHDG_HOME/bin/server.sh
$RHDG_HOME/bin/server.sh
Windows
$RHDG_HOME\bin\server.bat
$RHDG_HOME\bin\server.bat
包含 --help 或 -h 选项以查看命令参数。
12.1.3. 停止服务器 复制链接链接已复制到粘贴板!
使用 shutdown 命令和 CLI 执行安全关闭。
或者,从终端输入 Ctrl-C 以中断服务器进程或通过 TERM 信号终止它。
12.1.4. Configuration 复制链接链接已复制到粘贴板!
服务器配置通过以下特定于服务器的元素扩展了数据网格配置:
cache-container- 定义用于管理缓存生命周期的缓存容器。
端点- 为客户端协议启用和配置端点连接器。
安全- 配置端点安全域。
socket-bindings- 将端点连接器映射到接口和端口。
默认的配置文件为 $RHDG_HOME/server/conf/infinispan.xml。
使用带有 -c 参数的不同配置文件,如下例所示,该服务器在没有集群功能的情况下启动服务器:
Unix / Linux
$RHDG_HOME/bin/server.sh -c infinispan-local.xml
$RHDG_HOME/bin/server.sh -c infinispan-local.xml
Windows
$RHDG_HOME\bin\server.bat -c infinispan-local.xml
$RHDG_HOME\bin\server.bat -c infinispan-local.xml
12.1.5. 绑定地址 复制链接链接已复制到粘贴板!
默认情况下,Data Grid 服务器绑定到网络上的 loopback IP 地址 localhost。
使用 -b 参数设置不同的 IP 地址,如下例所示:
Unix / Linux
$RHDG_HOME/bin/server.sh -b 0.0.0.0
$RHDG_HOME/bin/server.sh -b 0.0.0.0
Windows
$RHDG_HOME\bin\server.bat -b 0.0.0.0
$RHDG_HOME\bin\server.bat -b 0.0.0.0
12.1.6. 绑定端口 复制链接链接已复制到粘贴板!
默认情况下,Data Grid 服务器侦听端口 11222。
使用 -p 参数设置替代端口:
Unix / Linux
$RHDG_HOME/bin/server.sh -p 30000
$RHDG_HOME/bin/server.sh -p 30000
Windows
$RHDG_HOME\bin\server.bat -p 30000
$RHDG_HOME\bin\server.bat -p 30000
12.1.7. 集群地址 复制链接链接已复制到粘贴板!
Data Grid Server 配置定义了集群传输,以便同一网络上的多个实例相互发现并自动组成集群。
使用 -k 参数更改集群流量的 IP 地址:
Unix / Linux
$RHDG_HOME/bin/server.sh -k 192.168.1.100
$RHDG_HOME/bin/server.sh -k 192.168.1.100
Windows
$RHDG_HOME\bin\server.bat -k 192.168.1.100
$RHDG_HOME\bin\server.bat -k 192.168.1.100
12.1.8. 集群堆栈 复制链接链接已复制到粘贴板!
JGroups 堆栈配置用于集群传输的协议。默认情况下,Data Grid 服务器使用 tcp 堆栈。
使用带有 -j 参数的替代集群堆栈,如下例所示,使用 UDP 进行集群传输:
Unix / Linux
$RHDG_HOME/bin/server.sh -j udp
$RHDG_HOME/bin/server.sh -j udp
Windows
$RHDG_HOME\bin\server.bat -j udp
$RHDG_HOME\bin\server.bat -j udp
12.1.9. 身份验证 复制链接链接已复制到粘贴板!
Data Grid Server 需要身份验证。
使用 CLI 创建用户名和密码,如下所示:
Unix / Linux
$RHDG_HOME/bin/cli.sh user create username -p "qwer1234!"
$RHDG_HOME/bin/cli.sh user create username -p "qwer1234!"
Windows
$RHDG_HOME\bin\cli.bat user create username -p "qwer1234!"
$RHDG_HOME\bin\cli.bat user create username -p "qwer1234!"
12.1.10. 服务器主目录 复制链接链接已复制到粘贴板!
Data Grid 服务器使用 infinispan.server.home.path 来查找主机文件系统上服务器分发的内容。
服务器主目录,称为 $RHDG_HOME,包含以下文件夹:
| 目录 | 描述 |
|---|---|
|
| 包含用于启动服务器和 CLI 的脚本。 |
|
|
包含用于引导服务器的 |
|
| 提供配置示例、架构、组件许可证和其他资源。 |
|
|
包含服务器内部需要的 |
|
| 为 Data Grid 服务器实例提供根文件夹。 |
|
| 包含 Data Grid 控制台的静态资源。 |
12.1.11. 服务器根目录 复制链接链接已复制到粘贴板!
Data Grid 服务器使用 infinispan.server.root.path 来查找 Data Grid 服务器实例的配置文件和数据。
您可以在相同目录或不同的目录中创建多个服务器根文件夹,然后使用 -s 或 --server-root 参数指定位置,如下例所示:
Unix / Linux
$RHDG_HOME/bin/server.sh -s server2
$RHDG_HOME/bin/server.sh -s server2
Windows
$RHDG_HOME\bin\server.bat -s server2
$RHDG_HOME\bin\server.bat -s server2
每个服务器根目录都包含以下文件夹:
├── server │ ├── conf │ ├── data │ ├── lib │ └── log
├── server
│ ├── conf
│ ├── data
│ ├── lib
│ └── log
| 目录 | 描述 | 系统属性覆盖 |
|---|---|---|
|
| 包含服务器配置文件。 |
|
|
| 包含按容器名称组织的数据文件。 |
|
|
|
包含服务器扩展文件。 |
|
|
| 包含服务器日志文件。 |
|
12.1.12. 日志记录 复制链接链接已复制到粘贴板!
使用 server/conf 文件夹中的 log4j2.xml 文件配置 Data Grid 服务器日志。
使用 --logging-config=<path_to_logfile > 参数来使用自定义路径,如下所示:
Unix / Linux
$RHDG_HOME/bin/server.sh --logging-config=/path/to/log4j2.xml
$RHDG_HOME/bin/server.sh --logging-config=/path/to/log4j2.xml
为确保自定义路径生效,请不要使用 ~ 快捷方式。
Windows
$RHDG_HOME\bin\server.bat --logging-config=path\to\log4j2.xml
$RHDG_HOME\bin\server.bat --logging-config=path\to\log4j2.xml