8.3. 传输堆栈
传输堆栈可确保集群中的分布式缓存节点以可靠的方式进行通信。红帽构建的 Keycloak 支持广泛的传输堆栈:
- tcp
- udp
- kubernetes
- ec2
- azure
要应用特定的缓存堆栈,请输入以下命令:
bin/kc.[sh|bat] build --cache-stack=<stack>
启用分布式缓存时,默认堆栈设置为 udp
。
8.3.1. 可用的传输堆栈
下表显示了比使用 --cache-stack
构建选项的情况下可用的传输堆栈,而无需进一步配置:
堆栈名称 | 传输协议 | Discovery(发现) |
---|---|---|
tcp | TCP | MPING (使用 UDP 多播)。 |
udp | UDP | UDP 多播 |
下表显示了使用 --cache-stack
构建选项和最小配置可用的传输堆栈:
堆栈名称 | 传输协议 | Discovery(发现) |
---|---|---|
kubernetes | TCP |
DNS_PING (需要 |
8.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] build --cache-stack=<ec2|google|azure>
8.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
选项不用于自定义更改生效。