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 堆栈。
定义自定义传输堆栈
<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>
默认情况下,设置为 cache-stack
选项的值优先于您在缓存配置文件中定义的传输堆栈。如果要定义自定义堆栈,请确保 cache-stack
选项不用于自定义更改生效。