TL; DR: แแฅแแแแ Keycloak-แแก แแฆแฌแแ แ, แฆแแ แแแแแก แฌแแแแแแก แแแแขแ แแแแก แกแแกแขแแแ, แจแแแ แกแขแ แฃแฅแขแฃแ แแก แแแแแแแ, แแแแคแแแฃแ แแชแแแก แแแขแแแแแ.
แจแแกแแแแแ แแ แซแแ แแแแแ แแแแแแ
แแ แกแขแแขแแแจแ แฉแแแ แแแฎแแแแแ แซแแ แแแแ แแแแแแก, แ แแแแแแแช แฃแแแ แแแแฎแกแแแแแก Kubernetes-แแก แแแแแ Keycloak แแแแกแขแแ แแก แแแแแแแแแแกแแก.
แแฃ แแกแฃแ แ แแแแแแ แแแขแ Keycloak-แแก แจแแกแแฎแแ, แแฎแแแแ แแแฃแแแแ แกแขแแขแแแก แแแแแก. แแแแกแแแแแก, แ แแ แฃแคแ แ แแแขแแ แฉแแแคแแ แแ แแฅแขแแแแจแ, แจแแแแซแแแ แแกแฌแแแแ
Keycloak แแ แแก แฏแแแแจแ แแแฌแแ แแแ แงแแแแแกแแแแชแแแแ แกแแกแขแแแ แแ แแแแแฃแแแ แแแแแแแชแแแก แกแแ แแแ แแ
แแแแแขแแแแแแ แฌแแแแแแฎแแ แแคแแชแแแแฃแ แ
Keycloak-แแก แแแจแแแแ
Keycloak แกแแญแแ แแแแก แแแแแชแแแแ แแ แแฃแแแแ แฌแงแแ แแก แแแกแแจแแแแแ:
- แแแแแชแแแแ แแแแ, แ แแแแแแช แแแแแแงแแแแแ แแแแแแแแแ แแแแแชแแแแแแก แจแแกแแแแฎแแ, แ แแแแ แแชแแ แแแแฎแแแ แแแแแก แแแคแแ แแแชแแ
- แแแแแชแแแแ แแแแแก แฅแแจแ, แ แแแแแแช แแแแแแงแแแแแ แแแแแชแแแแ แแแแแแแ แแแแแชแแแแแแก แจแแกแแแแฎแแ, แแกแแแ แฎแแแแแแแ แแ แฎแจแแ แแ แชแแแแแแแแ แแแขแแแแแแชแแแแแแก แจแแกแแแแฎแแ, แ แแแแ แแชแแ แแแแฎแแแ แแแแแก แกแแกแแแแ. แแแแฎแแ แชแแแแแ
Infinispan , แ แแแแแแช แฉแแแฃแแแแ แแ แกแแแ แซแแแแแแ แฃแคแ แ แกแฌแ แแคแแ แแแแ แ แแแแแชแแแแ แแแแ. แแแแ แแ แแแแแกแแแแ แจแแแแฎแแแแแจแ, Infinispan-แจแ แจแแแแฎแฃแแ แแแแแชแแแแแ แแคแแแแ แฃแแแ - แแ แแ แแ แแก แกแแญแแ แ แกแแแแ แจแแแแฎแแ, แ แแแแกแแช แแแแกแขแแ แ แแแแแแขแแแ แแแแ.
Keycloak แแฃแจแแแแก แแแฎ แกแฎแแแแแกแฎแแ แ แแแแแจแ:
- แฉแแแฃแแแแ แแแ - แแ แแ แแ แแฎแแแแ แแ แแ แแ แแชแแกแ, แแแแคแแแฃแ แแ แแแฃแแ แคแแแแแก แกแแจแฃแแแแแแ แแแแแฃแแแแแแแแ.xml
- แ แแแฃแแแ แฃแแ แแแแกแขแแ แ (แแแฆแแแ แฎแแแแแกแแฌแแแแแแแแก แแแ แแแแขแ) - แงแแแแ แแ แแชแแกแแ แฃแแแ แแแแแแงแแแแก แแแแแ แแแแคแแแฃแ แแชแแ, แ แแแแแแช แฃแแแ แแงแแก แกแแแฅแ แแแแแแแฃแแ แฎแแแแ. แแแ แแแแขแ แแแ แแแแฎแแแ แคแแแแจแ standalone-ha.xml, แแแ แแ แแแแกแ, แแฅแแแ แฃแแแ แแฅแแแแแ แกแแแ แแ แฌแแแแแ แแแแแชแแแแ แแแแแแ แแ แแแขแแแ แแแแก แแแแแแกแแ แ.
- แแแแแแแก แแแแกแขแแ แ โ แแแแกแขแแ แแก แแแ แแแแฃแ แ แแแแแจแ แแแฌแงแแแ แกแฌแ แแคแแ แฎแแแแ แ แฃแขแแแฃแแ แแ แแแกแแฌแงแแแ แแแแชแแแ, แ แแแแแ แแแแกแขแแ แ แแแ แแแแ, แ แแแแแ แงแแแแ แฏแแ แแ, แ แแชแ แแแแคแแแฃแ แแชแแ แแชแแแแแ, แงแแแแ แชแแแแแแแ แฃแแแ แแแแฎแแ แชแแแแแแก แแแแแแฃแ แแแแกแขแแ แฃแ แแแแแซแแ. แแแแแแแก แแฃแจแแแแแก แ แแแแแ แแ แกแแแแแฎแก แฌแงแแแขแก แกแแแแแ แ แแแฎแกแแแ แแแแก แแแแแแ แแแแแก แแแงแแแแแแ แแ แแแแคแแแฃแ แแชแแแก แแแแแฅแแแงแแแแแ. แแก แแแ แแแแขแ แแแ แแแแฎแแแ แคแแแแจแ domain.xml
- แ แแแแแแแชแแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก โ แแฃ แแกแฃแ แ Keycloak-แแก แแแจแแแแ แ แแแแแแแแ แแแแแชแแแแ แชแแแขแ แแก แแแแกแขแแ แจแ, แงแแแแแแ แฎแจแแ แแ แกแฎแแแแแกแฎแแ แแแแแ แแคแแฃแ แแแแแแแก. แแ แแแ แแแแขแ แจแ, แแแแแแฃแ แแแแแชแแแแ แชแแแขแ แก แแฅแแแแ Keycloak แกแแ แแแ แแแแก แกแแแฃแแแ แ แแแแกแขแแ แ.
แแ แกแขแแขแแแจแ แแแขแแแฃแ แแ แแแแแแฎแแแแแ แแแแ แ แแแ แแแแขแก, แแแฃ แ แแแฃแแแ แฃแแ แแแแกแขแแ แแแ แฉแแแ แแกแแแ แชแแขแแแ แจแแแแฎแแแแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก แ แแแแแแแชแแแก แแแแแก, แ แแแแแ แแแ แ แแฅแแก แแ แแ แ แแแ แแแแขแแก แแแจแแแแแก Kubernetes-แจแ. แกแแแแแแแแ แแ, Kubernetes-แจแ แแ แแ แแก แแ แแแแแแ แ แแแแแแแแ แแแแแก (Keycloak แแแแแซแแแแก) แแแ แแแแขแ แแแแก แกแแแฅแ แแแแแแชแแแกแแแแก. แแแแแแแก แแแแกแขแแ แ แแแแก แแแแแแแแ แแ แแฅแแแแ แซแแแแแ แ แแฃแแ.
แแกแแแ แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แกแแขแงแแ แแขแแแแแ แกแขแแขแแแก แแแแแ แฉแแแ แแแฌแแแแกแแแแก แแแแแแงแแแแแ แแฎแแแแ Keycloak แแแแแซแแแแก แฏแแฃแคแแ, แ แแแแแแแช แแฃแจแแแแแ แแ แแแ, แแ แแ แแก แกแแญแแ แ Kubernetes แแแแกแขแแ แแ แแแแแแแแ.
แ แแแฃแแแ แฃแแ Keycloak แแแแกแขแแ แ
Keycloak แแ แ แแแแแจแ แแแกแแจแแแแแ แแญแแ แแแแแ:
- แแแ แ แกแแแ แแ แแแแแชแแแแ แแแแแก แแแแคแแแฃแ แแชแแ
- แแแแแแกแขแแแแ แแ แแแขแแแ แแแแก แแแแแแกแแ แ
- แแฅแแก แจแแแ แฅแกแแแ IP multicast แแฎแแ แแแญแแ แแ
แฉแแแ แแ แแแแแแฎแแแแแ แแแ แ แแแแแชแแแแ แแแแแก แจแแฅแแแแก, แ แแแแแ แแก แแ แแ แแก แแ แกแขแแขแแแก แแแแแแ. แแแแฃแจแแแ, แ แแ แกแแแฆแแช แแ แแก แกแแแฃแจแแ แแแแแชแแแแ แแแแ - แแ แฉแแแ แแแแฅแแก แแแกแแแ แแแแจแแ แแก แฌแแ แขแแแ. แฉแแแ แฃแแ แแแแ แแแแแแแขแแแ แแ แแแแแชแแแแแก แแแ แแแแก แชแแแแแแแก.
แฃแแแ แ แแ แแแแแแแ, แ แแแแ แแฃแจแแแแก Keycloak แคแแแแแแ แแก (HA) แแแแกแขแแ แจแ, แแแแจแแแแแแแแแแ แแแชแแแแ, แ แแแแแแแ แแ แแก แแก แงแแแแแคแแ แ แแแแแแแแแแฃแแ Wildfly-แแก แแแแกแขแแ แแ แแแแก แจแแกแแซแแแแแแแแแแ.
Wildfly แแงแแแแแก แ แแแแแแแแ แฅแแแกแแกแขแแแแก, แแแแ แแแแแแแ แแแแแแงแแแแแ แ แแแแ แช แแแขแแแ แแแแก แแแแแแแแแแกแแแแแ, แแแแแช แจแแชแแแแแแแก แขแแแแ แแแขแแแแกแแแแก. แแแขแแแ แแแแก แแแแแแกแแ แ แฃแแ แฃแแแแแงแแคแก แแแแแแแชแแแก แฎแแแแแกแแฌแแแแแแแแก, แ แแแแกแแช แแแแกแขแแ แฃแแ แแแแแซแ แแแแแขแแแ แแฃแแแ, แฎแแแ แจแแชแแแแแก แขแแแแ แแแขแแแ แฃแแ แฃแแแแแงแแคแก แแแแแแแชแแแก แฎแแแแแกแแฌแแแแแแแแก แแแจแแแแช แแ, แแฃ แแแแแแ แแ แแแแกแขแแ แฃแแ แแแแแซแ แแแ แฎแแ แฎแแแแ. แแแแแแ แแ แแ แฅแแแกแแกแขแแแแแแ:
-
mod_cluster
: แแฃแจแแแแก Apache-แแแ แแ แแแ, แ แแแแ แช HTTP แแแขแแแ แแแแก แแแแแแกแแ แ, แแแแแแแแแแฃแแแ TCP multicast-แแ, แ แแแ แแแแซแแแก แฐแแกแขแแแ แแแแฃแแแกแฎแแแแแ. แจแแแซแแแแ แจแแแชแแแแแก แแแ แ แแแแแแกแแ แแ. -
infinispan
: แแแแแฌแแแแแฃแแ แฅแแจแ JGroups แแ แฎแแแแก แแแแแงแแแแแแ แกแแขแ แแแกแแแ แขแ แคแแแแ. แแแ แแ แแแแกแ, แแแก แจแแฃแซแแแ แแแแแแงแแแแก HotRod แแ แแขแแแแแ แแแ แ Infinispan แแแแกแขแแ แแแ แแแแฃแแแแแชแแแกแแแแก แฅแแจแแก แจแแแแแ แกแแก แกแแแฅแ แแแแแแชแแแกแแแแก. -
jgroups
: แฃแแ แฃแแแแแงแแคแก แฏแแฃแคแฃแ แ แแแแฃแแแแแชแแแก แแฎแแ แแแญแแ แแก JGroups แแ แฎแแแแ แแแคแฃแซแแแแฃแแ แแแฆแแ แฎแแแแแกแแฌแแแแแ แกแแ แแแกแแแแกแแแแก. แแแกแแฎแแแแแฃแแ แแแแแแ แกแแจแฃแแแแแแก แแซแแแแก แแแแกแขแแ แจแ แแแแแแแชแแแก แจแแแแฎแแแแแแก แแแแแแจแแ แแแก แฏแแฃแคแแแแ, แ แแแ แแแแฃแแแแแชแแแก แฐแฅแแแแแก แแกแแแ แแแแกแแแแแ, แ แแแแ แแชแแ แกแแแแแแแแแ, แแแฌแแกแ แแแแแ แแ แแแ แซแแแแแแแแ แฌแแ แฃแแแขแแแแแแแก แแแแแ แ.
แแแขแแแ แแแแก แแแแแแกแแ แ
แแฃแแแ แแแขแแก แแแแกแขแแ แจแ แแแแแแกแแ แแก, แ แแแแ แช แจแแฆแฌแแแแก แแแแขแ แแแแ แแก แแแงแแแแแแกแแก, แแแแจแแแแแแแแแแ แแแฎแกแแแแแ แจแแแแแแ:
Keycloak แแแ แแฃแแแแก, แ แแ แแแแแแขแแก แแแกแขแแแชแแฃแ แ แแแกแแแแ แแ, แ แแแแแแช แฃแแแแจแแ แแแแ HTTP-แแ แแแขแแ แแแแชแแแก แกแแ แแแ แก, แแ แแก แแแแแแขแแก แแแแแแฃแขแแ แแก แ แแแแฃแ แ IP แแแกแแแแ แแ. แแแแแแกแแ แแกแ แแ แจแแงแแแแแก แแแ แแแแขแ แแแแ แกแฌแแ แแ แฃแแแ แแแแงแแแแ HTTP แกแแแแฃแ แแแ X-Forwarded-For
ะธ X-Forwarded-Proto
แแ แแกแแแ แจแแแแแฎแแ แแ แแแแแแแฃแ แ แกแแแแฃแ แ HOST
. แฃแแฎแแแกแ แแแ แกแแ ingress-nginx
(>0.22.0)
แแ แแจแแก แแแแฅแขแแฃแ แแแ proxy-address-forwarding
แแแ แแแแก แชแแแแแแก แแแงแแแแแแ PROXY_ADDRESS_FORWARDING
ะฒ true
แแซแแแแก Keycloak-แก แแแแก แแแแแแแก, แ แแ แแก แแฃแจแแแแก แแ แแฅแกแแก แแแฆแแ.
แแฅแแแ แแกแแแ แฃแแแ แฉแแ แแแ แฌแแแแแแแ แกแแกแแแแ แจแแแแกแแแแกแแก. Keycloak แแงแแแแแก แแแแแฌแแแแแฃแ Infinispan แฅแแจแก, แ แแแ แจแแแแแฎแแก แแแแแชแแแแแ, แ แแแแแแแช แแแแแแจแแ แแแฃแแแ แแแแแแขแแคแแแแชแแแก แแแแแแแแ แ แกแแกแแแกแแแ แแ แแแแฎแแแ แแแแแก แกแแกแแแกแแแ. แฅแแจแแแ แแแแฃแแแกแฎแแแแแ แคแฃแแฅแชแแแแแ แแแก แแ แ แแคแแแแแแแแ, แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, แแก แแแแแ แแขแฃแแ แกแแกแแ แแแแฎแแแ แแแแกแขแแ แแก แแแแแแ แ แแแแแซแแ แแ แกแฎแแ แแแแแซแแแแ แฃแแแ แแแแแแแแแฎแแ แแแ แแแกแขแแแชแแฃแ แแ, แแฃ แแแ แกแญแแ แแแแแ แแ แกแแกแแแแ แฌแแแแแ.
แแแแแ แแขแฃแแแ, แแแแฃแแแแขแแชแแแก แกแแฌแแแแแฆแแแแแแ, แกแแกแแแก แแแแแแ แแแ แฅแฃแฅแ-แคแแแแแก แกแแฎแแแแ แแ แแแแแแแแแแแแ
AUTH_SESSION_ID
. Keycloak-แก แแฅแแก แแแแแแแกแแแแ แแแแแก แชแแแแ, แแแแขแแ แฉแแแ แแแ แฉแแแ แแแ แฉแแแ แกแฎแแ แฅแฃแฅแ-แคแแแแแก แกแแฎแแแ แฌแแแแแแแ แกแแกแแแกแแแแก.
Keycloak แแกแแแ แแแแญแแแก แแ แแแแแซแแก แกแแฎแแแก, แ แแแแแกแแช แแแ แแแแ แฃแแแกแฃแฎแ AUTH_SESSION_ID
แแ แ แแแแแ แงแแแแ แแแแแซแ แแแฆแแ แฎแแแแแกแแฌแแแแ แแแ แกแแแจแ แแงแแแแแก แแ แแกแ แแ แแแแแ แแแแแชแแแแ แแแแแก, แแแแแแฃแแ แแแแแแแ JAVA_OPTS
แแแ แแแแขแ แแแ jboss.node.name
ะธ jboss.tx.node.id
แฃแแแแแแฃแ แ แแแแแแฃแแ แแแแแซแแกแแแแก - แจแแแแซแแแแ, แแแแแแแแแ, แฉแแกแแแ แแแแแก แกแแฎแแแ. แแฃ แแฅแแแ แแแแงแแแแแ pod แกแแฎแแแก, แแ แแแแแแฌแงแแ jboss แชแแแแแแแแก 23 แกแแแแแแแก แแแแแขแ, แแแแขแแ แฃแแฏแแแแกแแ แแแแแแงแแแแ StatefulSet แแแแ แ Deployment.
แแแแแ แแ แแ แกแแแแแแกแแ - แแฃ แแแแ แฌแแแจแแแแ แแ แแแแแแขแแแ แแแแ, แแแกแ แฅแแจแ แแแแ แแแแ. แแแแก แแแแแแแแกแฌแแแแแแ, แฆแแ แก แงแแแแ แฅแแจแแกแแแแก แฅแแจแแก แแคแแแแแแแก แ แแแแแแแแแก แแแงแแแแแ แแแแแแฃแ แแ แแ, แ แแแ แแแ แฉแแก แฅแแจแแก แแกแแ. แแแแแกแแแแแ แกแแ แแแแแ /opt/jboss/startup-scripts
แแแแขแแแแแ แจแ:
แกแแ แแแขแแก แจแแแแแ แกแ
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
echo * Setting CACHE_OWNERS to "${env.CACHE_OWNERS}" in all cache-containers
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
run-batch
stop-embedded-server
แจแแแแแ แแแแงแแแแ แแแ แแแแก แชแแแแแแก แแแแจแแแแแแแ CACHE_OWNERS
แกแแญแแ แแแแแแแ.
แแแ แแแ แฅแกแแแ IP แแฃแแขแแแแกแขแแก แแฎแแ แแแญแแ แแ
แแฃ แแงแแแแแ Weavenet-แก, แ แแแแ แช CNI, Multicast แแแฃแจแแแแแก แแแฃแงแแแแแแแแ - แแ แแฅแแแแ Keycloak แแแแแซแแแ แแแแแแฎแแแแ แแ แแแแแแแก, แ แแแแ แช แแ แแแแฌแงแแแ.
แแฃ แแ แแแฅแแ ip multicast แแฎแแ แแแญแแ แ แแฅแแแแก Kubernetes แแแแกแขแแ แจแ, แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ JGroups แกแฎแแ แแ แแขแแแแแแแแแ แแแแแซแแแแก แแแกแแซแแแแแ.
แแแ แแแแ แแแ แแแแขแ แแ แแก แแแแแงแแแแแ KUBE_DNS
แ แแแแแแช แแงแแแแแก headless service
Keycloak แแแแแซแแแแก แกแแแแแแแแแ, แแฅแแแ แฃแแ แแแแ แแแแแกแชแแแ JGroups แกแแ แแแกแแก แกแแฎแแแก, แ แแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแซแแแแก แแแกแแซแแแแแ.
แแแแแ แแ แแ แแแ แแแแขแแ แแแแแแแก แแแแแงแแแแแ KUBE_PING
, แ แแแแแแช แแฃแจแแแแก API-แกแแแ แแแแแซแแแแก แแแกแแซแแแแแ (แแฅแแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ serviceAccount
แฃแคแแแแแแแ list
ะธ get
, แแ แจแแแแแ แแแแแแแคแแแฃแ แแ แแ แแแแแแ, แ แแ แแแฃแจแแแ แแแกแแแ serviceAccount
).
JGroups แแแแแซแแแแก แแแแแแก แแแ แแแแคแแแฃแ แแ แแแฃแแแ แแแ แแแแก แชแแแแแแแแก แแแงแแแแแแ JGROUPS_DISCOVERY_PROTOCOL
ะธ JGROUPS_DISCOVERY_PROPERTIES
. แแงแแแแแ KUBE_PING
แแฅแแแ แฃแแแ แแแ แฉแแแ pods แแแแฎแแแ namespace
ะธ labels
.
๏ธ แแฃ แแงแแแแแ multicast แแ แแฌแแ แแแแแ แแ แแ แแแข Keycloak แแแแกแขแแ แก แแ แ Kubernetes แแแแกแขแแ แจแ (แแแฅแแแ แแ แแ แกแแฎแแแแ แกแแแ แชแแจแ
production
, แแแแ แ -staging
) - แแ แแ Keycloak แแแแกแขแแ แแก แแแแแซแแแก แจแแฃแซแแแแ แจแแฃแแ แแแแแ แแแแ แ แแแแกแขแแ แก. แแแ แฌแแฃแแแแ, แ แแ แแแแแแงแแแแ แฃแแแแแแฃแ แ แแฃแแขแแแแกแขแแก แแแกแแแแ แแ แแแแแแฃแแ แแแแกแขแแ แแกแแแแก แชแแแแแแแแก แแแงแแแแแแjboss.default.multicast.address
ะธjboss.modcluster.multicast.address
ะฒJAVA_OPTS
.
แ แแแแแแแชแแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก
แแแแแแแ
Keycloak แแงแแแแแก แแ แแแแ แชแแแแแฃแ Infinispan แฅแแจแ แแแแกแขแแ แแแก แแแแแแฃแแ แแแแแชแแแแ แชแแแขแ แแกแแแแก, แกแแแแช แแแแแแ แแแแก Keycloak แแแแแซแแแแกแแแ แจแแแแแแ แ Keycloack แแแแกแขแแ แแแ. แแแแ แแ แแ แแ แกแแแแแก แแแแกแฎแแแแแแ Keycloak แแแแแซแแแก แจแแ แแก แกแฎแแแแแกแฎแแ แแแแแชแแแแ แชแแแขแ แจแ.
Keycloak แแแแแซแแแ แแงแแแแแแ แแแ แ Java Data Grid-แก (Infinispan แกแแ แแแ แแแ) แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก แแแแฃแแแแแชแแแกแแแแก. แแแแฃแแแแแชแแ แแ แแขแแแแแแก แแแฎแแแแแ แแฃแจแแแแก
Infinispan แฅแแจแ แฃแแแ แแงแแก แแแแคแแแฃแ แแ แแแฃแแ แแขแ แแแฃแขแแ remoteStore
แแกแ, แ แแ แแแแแชแแแแ แแแกแขแแแชแแฃแ แแ แจแแแแฎแแ (แกแฎแแ แแแแแชแแแแ แชแแแขแ แจแ, แแแแฎแ. แแแแ แแแแแแ) แฅแแจแแแ. JDG แกแแ แแแ แแแก แจแแ แแก แแ แแก แชแแแแ infinispan แแแแกแขแแ แแแ, แ แแแ แแแแแชแแแแแ แแแแฎแแแ JDG1-แแ แกแแแขแแ site1
แแแแแแแ แแแแ JDG2-แแ แแแแแแแ site2
.
แแ แแแแแก, แแแแฆแแแ JDG แกแแ แแแ แ แแชแแแแแแก Keycloak แกแแ แแแ แแแก แแแกแ แแแแกแขแแ แแก แจแแกแแฎแแ แแแแแแขแแก แแแแจแแ แแแแก แกแแจแฃแแแแแแ, แ แแช HotRod แแ แแขแแแแแแก แแแฎแแกแแแแแแแแแ. Keycloak แแแแแซแแแ แฉแแ แแฃแแแ site2
แแแแแแฎแแแ แแแแ Infinispan แฅแแจแแแ แแ แแแแฎแแแ แแแแแก แแแแแ แแขแฃแแ แกแแกแแ แแกแแแ แฎแแแแแกแแฌแแแแแ แแแฎแแแแ Keycloak แแแแแซแแแแ site2
.
แแแแแแ แแ แฅแแจแแกแแแแก แแกแแแ แจแแกแแซแแแแแแแ แแ แแแแแแแแ แกแแ แแแแ แแ แแกแแแแ แแ แแแแแแแแ แแแแแแแ แแแชแแแแ แแแแแชแแแแแแก แฉแแฌแแ แ Infinispan แกแแ แแแ แแก แแแจแแแแแแ. แแแแกแแแแแก แแฅแแแ แฃแแแ แฌแแจแแแแ แแแ แแแแขแ แ remote-store
แแแแแ แแขแฃแแ Infinispan แฅแแจแ (แคแแแแจแ standalone-ha.xml), แ แแก แจแแแแแแแช แแแ แแแแฃแแ แแแแแ แแขแฃแแ replicated-cache
แแกแแแ แแฆแแ แแฅแแแแ แกแแญแแ แ Infinispan แกแแ แแแ แแก แแฎแแ แแก.
แฅแแจแแแแก แแแงแแแแแ
Keycloak-แจแ แแ แ แขแแแแก แฅแแจแแ:
-
แแแแแแแแ แแแ. แแก แแแแแแ แแแแก แแแแแชแแแแ แแแแแก แแแแ แแแ แแ แแแกแแฎแฃแ แแแ แแแแแชแแแแ แแแแแก แแแขแแแ แแแแก แจแแแชแแ แแแแก, แแกแแแ แ แแแแแ แแแแก แจแแงแแแแแแแก แจแแแชแแ แแแแก. แแ แขแแแแก แฅแแจแ แแแแฎแแแก แกแคแแ แแก, แแแแแแขแแแก, แ แแแแแก แแ แแแแฎแแแ แแแแแก แแแขแแแแแแชแแแแแก. แแ แขแแแแก แฅแแจแ แแ แแ แแก แแแแแแ แแแฃแแ, แแแจแแแแช แแ, แแฃ แฅแแจแ แแ แแก Keycloak แแแแกแขแแ แแก แแแฌแแแ. แแฃ แฅแแจแจแ แฉแแแแฌแแ แ แแชแแแแแ, แชแแแแแแแแแแก แจแแกแแฎแแ แจแแขแงแแแแแแแ แแแแแแแแแ แแแแกแขแแ แจแ แแแ แฉแแแแ แกแแ แแแ แแแแ, แ แแก แจแแแแแแแช แฉแแแแฌแแ แ แแแแแแ แแชแฎแแแ แฅแแจแแแแ. แแฎแแแแ แแฆแฌแแ แ
work
แแฎแแแแ แฅแแแแแ แแ แแชแแแฃแ แแก แฃแคแ แ แแแขแแแฃแ แ แแฆแฌแแ แ. -
แแแแแแ แแแฃแแ. แแแฃแจแแแแแก แแแแฎแแแ แแแแแก แกแแกแแแแก, แแคแแแแ แขแแแแแแแก แแ แแกแแแ แแแแแขแ แแแแแก แจแแกแแแแก แจแแชแแแแแแก, แ แแแ แแฆแแแแฉแแแแก แแแ แแแแก แคแแจแแแแแก แแชแแแแแแแแ แแ แกแฎแแ แจแแขแแแแแ. แแ แฅแแจแแแจแ แจแแแแฎแฃแแ แแแแแชแแแแแ แแ แแแแแแแ, แแแแฎแแแ แแฎแแแแ RAM-แจแ, แแแแ แแ แจแแแซแแแแ แแแแ แแแแแแก แแแแกแขแแ แจแ.
Infinispan แฅแแจแแแ
แกแแกแแแแ - แแแแชแแคแชแแ Keycloak-แจแ, แชแแแแ แฅแแจแแแ แ.แฌ authenticationSessions
, แแแแแแงแแแแแ แแแแแ แแขแฃแแ แแแแฎแแแ แแแแแแแก แแแแแชแแแแแแก แจแแกแแแแฎแแ. แแแแฎแแแแแแ แแ แฅแแจแแแแแแ แฉแแแฃแแแแ แแ แกแแญแแ แแ แแ แแฃแแแ แแกแ แแ Keycloak แกแแ แแแ แแแแกแแแแก แแ แแ แ แแแแแแแชแแแแแกแแแแก. แแฅ แฉแแแแแ แแแแแแแแแแฃแแแแ แฌแแแแแแ แกแแกแแแแแ แแ แแแแแ แแกแแแ แฅแแจแแแ แแ แกแแญแแ แแแแก แแแแแแ แแแแก, แแฃแแแแช แแฅแขแแฃแ แ-แแฅแขแแฃแ แ แ แแแแแแก แจแแแแฎแแแแแจแ.
แแแฅแแแแแแแก แแแจแแแแ. แแแแแ แแ แแ แแแแชแแคแชแแ, แ แแแแแแช แฉแแแฃแแแแ แแ แแแแแแงแแแแแ แกแฎแแแแแกแฎแแ แกแชแแแแ แแแแกแแแแก, แ แแแแกแแช, แแแแแแแแแ, แแแแฎแแแ แแแแแแ แฃแแแ แแแแแแแแก แ แแแแ แแกแแแฅแ แแแฃแแแ แคแแกแขแแ. แแแแแแแแแ, แแ แแชแแแฃแ แแก แแ แแก forget password
แฅแแจแ actionTokens
แแแแแแงแแแแแ แแกแแชแแ แแแฃแแ แขแแแแแแแแก แแแขแแแแแแชแแแแแแก แแแแแงแฃแ แแก แแแแแแแแกแแแแก - แแแแแแแแแ, แแแขแแแ แฃแแแ แแแแแงแแแแแฃแแแ แแ แแแกแ แฎแแแแฎแแ แแแแฅแขแแฃแ แแแ แจแแฃแซแแแแแแแ. แแ แขแแแแก แฅแแจแ, แ แแแแ แช แฌแแกแ, แกแแญแแ แแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก แแแแแแ แแแ.
แจแแแแฎแฃแแ แแแแแชแแแแแแก แฅแแจแแ แแแ แแ แแแซแแแแแแ แแฃแจแแแแก แแแแแชแแแแ แแแแแแ แแแขแแแ แแแแก แจแแกแแแกแฃแแฃแฅแแแแแ. แแแแแแ แ แฅแแจแแ แแแ แแฃแแฏแแแแกแแแก แจแแกแ แฃแแแแแก, แแแแ แแ แแแแขแแแก แแจแแแ แ แแ แแแแแแแก. แแฃ แแ แแ Keycloak แกแแ แแแ แ แแแแแแฎแแแแก แแแแแชแแแแแก, แกแฎแแ แกแแ แแแ แแแก แฃแแแ แแชแแแแแก, แ แแแ แแแ แจแแซแแแ แแแแแชแแแแแแก แแแแแฎแแแแ แแแแแแแ แฅแแจแแแจแ. Keycloak แแงแแแแแก แแแแแแแแ แแ แฅแแจแแแก realms
, users
ะธ authorization
แแแแแชแแแแ แแแแแแแ แฅแแจแแ แแแแกแแแแก.
แแกแแแ แแ แแก แชแแแแ แฅแแจแ work
, แ แแแแแแช แแแแ แแแแ แงแแแแ แแแแแชแแแแ แชแแแขแ แจแ. แแก แแแแแกแแแแแ แแ แแแแฎแแแก แแแแแชแแแแแก แแแแแชแแแแ แแแแแแแ, แแแแ แแ แแแกแแฎแฃแ แแแ แแแแแชแแแแ แแแแแ แแแแก แจแแกแแฎแแ แจแแขแงแแแแแแแแแแก แแแแแแแแแก แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก แแแแกแขแแ แฃแ แแแแแซแแแจแ. แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, แ แแแแ แช แแ แแแแแชแแแแแ แแแแแฎแแแแแ, Keycloak แแแแแซแ แแแแแแแแก แจแแขแงแแแแแแแแก แแแแแก แแแแแชแแแแ แชแแแขแ แแก แกแฎแแ แแแแแซแแแก, แแกแแแ แ แแแแ แช แกแฎแแ แแแแแชแแแแ แชแแแขแ แแแแก แแแแแซแแแก. แแกแแแ แจแแขแงแแแแแแแแก แแแฆแแแแก แจแแแแแ, แแแแแแฃแแ แแแแแซแ แแกแฃแคแแแแแแก แจแแกแแแแแแก แแแแแชแแแแแก แแแแแแแแ แแ แฅแแจแแแจแ.
แแแแฎแแแ แแแแแก แกแแกแแแแ. แฅแแจแแแ แกแแฎแแแแแแ sessions
, clientSessions
, offlineSessions
ะธ offlineClientSessions
, แฉแแแฃแแแแ แแ แแแแ แแแแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก แแ แแแกแแฎแฃแ แแแ แแแแฎแแแ แแแแแก แกแแกแแแแแก แจแแกแแฎแแ แแแแแชแแแแแแก แจแแกแแแแฎแแ, แ แแแแแแแช แแฅแขแแฃแ แแ, แกแแแแ แแแแฎแแแ แแแแแ แแฅแขแแฃแ แแ แแ แแฃแแแ แจแ. แแก แฅแแจแแแ แแฃแจแแแแก แแแแแแแชแแแแแแ, แ แแแแแแแช แแแฃแจแแแแแแ HTTP แแแแฎแแแแแแก แกแแแแแแ แแแแฎแแแ แแแแแแแกแแแ, แแแแขแแ แแกแแแ แแแแแแจแแ แแแฃแแแ แฌแแแแแแ แกแแกแแแแแแ แแ แฃแแแ แแแแแแแ แแแก แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก.
แฃแฎแแจแ แซแแแแก แแแชแแ. แฅแแจแ loginFailures
แแแแแแงแแแแแ แจแแกแแแแก แจแแชแแแแแก แแแแแชแแแแแแก แแแแแงแฃแ แแก แแแแแแแแกแแแแก, แแแแแแแแแ, แ แแแแแแฏแแ แจแแแงแแแแ แแแแฎแแแ แแแแแแ แแ แแกแฌแแ แ แแแ แแแ. แแ แฅแแจแแก แแแแแแ แแแ แแ แแก แแแแแแแกแขแ แแขแแ แแก แแแกแฃแฎแแกแแแแแแแแ. แแแแ แแ แแฃแกแขแ แแแแแแแ แแจแแแแกแแแแก, แฆแแ แก แ แแแแแแแชแแแก แแแแฅแขแแฃแ แแแ แแแแแชแแแแ แชแแแขแ แแแก แจแแ แแก. แแแแ แแ แแแแ แแก แแฎแ แแ, แแฃ แแ แแแแแแแ แแแ แแ แแแแแชแแแแแก, แแแแฃแแฏแแแแกแแแ แจแแกแ แฃแแแแแก แแ แแฃ แแก แแ แแแแแแ แฌแแ แแแแฅแแแแแ, แ แแแแแแแชแแ แจแแแซแแแแ แแ แแแแฅแขแแฃแ แแแก.
Infinispan แแแแกแขแแ แแก แแแจแแแกแแก, แแฅแแแ แฃแแแ แแแแแแขแแ แฅแแจแแก แแแแแแ แขแแแแแ แแแ แแแแขแ แแแแก แคแแแแก:
<replicated-cache-configuration name="keycloak-sessions" mode="ASYNC" start="EAGER" batching="false">
</replicated-cache-configuration>
<replicated-cache name="work" configuration="keycloak-sessions" />
<replicated-cache name="sessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineSessions" configuration="keycloak-sessions" />
<replicated-cache name="actionTokens" configuration="keycloak-sessions" />
<replicated-cache name="loginFailures" configuration="keycloak-sessions" />
<replicated-cache name="clientSessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineClientSessions" configuration="keycloak-sessions" />
แแฅแแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ แแ แแแแฌแงแแ Infinispan แแแแกแขแแ แ Keycloak แแแแกแขแแ แแก แแแฌแงแแแแแแ
แจแแแแแ แแฅแแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ remoteStore
Keycloak แฅแแจแแแแกแแแแก. แแแแกแแแแแก แกแแแแแ แแกแแ แกแแ แแแขแ, แ แแแแแแช แแแแแแแ แฌแแแแก แแกแแแแกแแ, แ แแแแแแช แแแแแแงแแแแแ แชแแแแแแก แแแกแแงแแแแแแแ. CACHE_OWNERS
, แแฅแแแ แฃแแแ แจแแแแแฎแแ แแก แคแแแแจแ แแ แฉแแแแ แแแ แแฅแขแแ แแแจแ /opt/jboss/startup-scripts
:
แกแแ แแแขแแก แจแแแแแ แกแ
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
echo *** Update infinispan subsystem ***
/subsystem=infinispan/cache-container=keycloak:write-attribute(name=module, value=org.keycloak.keycloak-model-infinispan)
echo ** Add remote socket binding to infinispan server **
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-cache:add(host=${remote.cache.host:localhost}, port=${remote.cache.port:11222})
echo ** Update replicated-cache work element **
/subsystem=infinispan/cache-container=keycloak/replicated-cache=work/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=work,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/replicated-cache=work:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache sessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=sessions,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache offlineSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=offlineSessions,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache clientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=clientSessions,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache offlineClientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=offlineClientSessions,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache loginFailures element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
remote-servers=["remote-cache"],
cache=loginFailures,
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache actionTokens element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens/store=remote:add(
passivation=false,
fetch-state=false,
purge=false,
preload=false,
shared=true,
cache=actionTokens,
remote-servers=["remote-cache"],
properties={
rawValues=true,
marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory,
protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion}
}
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=statistics-enabled,value=true)
echo ** Update distributed-cache authenticationSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=statistics-enabled,value=true)
echo *** Update undertow subsystem ***
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)
run-batch
stop-embedded-server
แแ แแแแแแแฌแงแแแ แแแกแขแแแแชแแ JAVA_OPTS
Keycloak แแแแแซแแแแกแแแแก HotRod-แแก แแแกแแจแแแแแ: remote.cache.host
, remote.cache.port
แแ แกแแ แแแกแแก แกแแฎแแแ jboss.site.name
.
แแแฃแแแแ แแ แแแแแขแแแแแ แแแแฃแแแแขแแชแแ
https://www.keycloak.org/docs/latest/server_installation/index.html https://docs.wildfly.org/17/High_Availability_Guide.html#cluster-configuration https://infinispan.org/docs/9.4.x/user_guide/user_guide.html https://hub.docker.com/r/jboss/keycloak https://hub.docker.com/r/jboss/infinispan
แกแขแแขแแ แแแแแแจแ แแแแแแแ แแแ แแแแแก แแ แแแแแแแแแก แฐแแแ แแกแแแแก
แฌแงแแ แ: www.habr.com