10.3. 传输堆栈
传输堆栈确保集群中的分布式缓存节点以可靠的方式进行通信。Red Hat build of Keycloak 支持各种传输堆栈:
- tcp
- udp
- kubernetes
- ec2
- azure
要应用特定的缓存堆栈,请输入以下命令:
bin/kc.[sh|bat] start --cache-stack=<stack>
启用分布式缓存时,默认堆栈设置为 udp。
10.3.1. 可用的传输堆栈 复制链接链接已复制到粘贴板!
下表显示了不使用使用- cache-stack 构建选项的进一步配置的传输堆栈:
| 堆栈名称 | 传输协议 | Discovery(发现) |
|---|---|---|
| tcp | TCP | MPING (使用 UDP 多播)。 |
| udp | UDP | UDP 多播 |
下表显示了使用- cache-stack 运行时选项和最低配置可用的传输堆栈:
| 堆栈名称 | 传输协议 | Discovery(发现) |
|---|---|---|
| kubernetes | TCP |
DNS_PING (需要 |
10.3.2. 其他传输堆栈 复制链接链接已复制到粘贴板!
下表显示了红帽构建的 Keycloak 支持的传输堆栈,但需要一些额外的步骤才能工作。请注意,这些堆栈都不是 Kubernetes / OpenShift 堆栈,因此如果 Google Kubernetes 引擎之上运行红帽构建的 Keycloak,则无需启用 google 堆栈。在这种情况下,使用 kubernetes 堆栈。相反,当您在 AWS EC2 实例上运行分布式缓存设置时,您需要将堆栈设置为 ec2,因为 ec2 不支持默认的发现机制,如 UDP。
| 堆栈名称 | 传输协议 | Discovery(发现) |
|---|---|---|
| ec2 | TCP | NATIVE_S3_PING |
| | TCP | GOOGLE_PING2 |
| azure | TCP | AZURE_PING |
特定于云供应商的堆栈有其他依赖项用于红帽构建的 Keycloak。有关这些依赖项的更多信息和存储库链接,请参阅 Infinispan 文档。
要为红帽构建的 Keycloak 提供依赖项,请将对应的 JAR 置于 供应商 目录中,并输入以下命令构建红帽构建的 Keycloak:
bin/kc.[sh|bat] start --cache-stack=<ec2|google|azure>
10.3.3. 自定义传输堆栈 复制链接链接已复制到粘贴板!
如果任何可用的传输堆栈都不够部署,您可以更改缓存配置文件并定义您自己的传输堆栈。
如需了解更多详细信息,请参阅 使用内联 JGroups 堆栈。
使用 UDP 定义带有加密的自定义堆栈
<jgroups>
<stack name="my-encrypt-udp" extends="udp">
<SSL_KEY_EXCHANGE keystore_name="server.jks"
keystore_password="password"
stack.combine="INSERT_AFTER"
stack.position="VERIFY_SUSPECT2"/>
<ASYM_ENCRYPT asym_keylength="2048"
asym_algorithm="RSA"
change_key_on_coord_leave = "false"
change_key_on_leave = "false"
use_external_key_exchange = "true"
stack.combine="INSERT_BEFORE"
stack.position="pbcast.NAKACK2"/>
</stack>
</jgroups>
<cache-container name="keycloak">
<transport lock-timeout="60000" stack="my-encrypt-udp"/>
...
</cache-container>
当环境中没有 IP 多播(或 UDP)时,使用静态 IP 地址列表配置 Red Hat build of Keycloak,如下例所示。
定义没有多播发现的自定义堆栈
<jgroups>
<stack name="tcpping" extends="tcp">
<TCPPING initial_hosts="192.168.1.1[7800],192.168.1.2[7800]"
stack.combine="REPLACE"
stack.position="MPING"/>
</stack>
</jgroups>
<cache-container name="keycloak">
<transport lock-timeout="60000" stack="tcpping"/>
...
</cache-container>
- 1
initial_hosts是以逗号分开的 IP 和端口列表,格式为IP[PORT]。
默认情况下,设置为 cache-stack 选项的值优先于您在缓存配置文件中定义的传输堆栈。如果要定义自定义堆栈,请确保 cache-stack 选项不用于自定义更改生效。