TL; DR: ᨠKeycloak ááááŤ, áááľ ááá ááłá¨áť ááĽáĽá áĽáááľ, á¨ááľáĽ ááŁáŞáŤ áľáá°á, á¨áá á¨áľ ááááŽá˝ áááŤá.
ááá˘áŤ áĽá áá ááłáŚá˝
á áá á˝áá ááľáĽ á¨áŞáá áááľá°á á áŠá áááľáľ á ááľ áá á˛áá¨á ááľáłááľ áŤááĽá áá ááłáŚá˝á áĽáááá¨áłááá˘
áľá Keycloak á¨á áá ááá
á¨áááᣠáĽáŁáá á á áááš áá¨á¨áť áŤááľá áááááá˝ áááá¨áąá˘ áĽáŤáľáá á áĽáááľ á á°ááŁá áááĽáá
, ááĽááľ áá˝áá
Keycloak á á፠á¨á°áá áĽá á áá°áá áŞáŤ á áááá áá á¨á°ááᣠááľáĽáľáĽ áľáááľ ááá˘
áŚáá´áááá áĽáá˛áŤáᥠáĽáááĽáááłáá
á¨ááá áá°á¨á˘áŤá ááá
á¨ááá ááá ááááľ áááľ áá á¨áá¨á áááŽá˝ áŤáľááááááĄ-
- áĽáá° á¨á°á áááá˝ áá¨á áŤá á¨ááŤááἠááἠááá¨áá¸áľ á¨ááŤáááá á¨ááἠááł
- áłáłááŞáľ áá¸ááŤáŁ á¨áá¨á ááą ááľáĽ áá¨áá ááá¸ááĽáŁ áĽáá˛áá á ááłááľ á áá áá á¨ááአáĽá á á°á°ááá á¨á°áá¨áŠ ááłáłáł áááłá á¨á°á áá ááá áááá˝á ááá¨áá¸áľ á¨ááŤáááá ááᢠá°ááá
á˘ááááľáá áĽááá áá á¨áá¨á ááą á áŁá ááŁá ááᢠááá áá á ááááá áááł á Infinispan ááľáĽ á¨á°ááá á áá¨á áá áŤááá áľ áá - áĽá áááľá°á áĽáá°áá á˛ááá á¨áá áŚáł ááľááἠá áŤáľáááá.
á¨ááá ááá á á áŤáľ á¨á°ááŤáŠ áááłáá˝ áá°áŤáá˘
- á¨á°ááá° - á ááľ áĽá á ááľ áá°áľ, á ááá á¨á°ááᨠááĽáťá.xml
- áá°á á ááá (á áŁá á¨ááá á ááŤá) - ááá áá°áśá˝ á ááľ á áááľ áá á áá áá á ááŁá¸á, áĽáąá á áĽá áááłá°á á áá áľ. á áá áśá˝ á ááá ááľáĽ á°á¨áá˝á°ááᢠááĽáťá-ha.xml, á á°á¨ááŞ, áá° á¨ááἠááł áĽá á¨áááľ ááá á¨á፠ááłá¨áť ááľá¨á á ááĽááľ.
- á¨á፠áľáĽáľáĽ - áááľá°áá á á°ááá°á áááł áááá áááľá°á áĽáŤá°á á˛ááľ á ááĽááľ áá°á á áĽá á á°ááş áľáŤ áááá, ááááŤáąá á ááááŠá á áá¨áŠ ááĽá á áĽáŤááłááą á¨áááľá°á ááľááá ááááľ áá áááá áááŚá˝ ááľá¨á áŤáľáááááłá. á¨áááá á¨á፠áááł á ááłááľ á¨á፠áá¨ááťá á áááááľ áĽá á ááááŠá á áá°á áá áá á˝áá áááłáᢠáĽááá á ááĽáŽá˝ á ááá ááľáĽ ááááŁáᢠdomain.xml
- á áá¨á ááĽá¨áá˝ ááŤá¨á ááŁááľ - Keycloaká á á ááŤáł á¨áá¨á ááĽá¨áá˝ áááľá°á ááľáĽ ááľáŹáľ á¨ááá áĽá áá á á°ááŤáŠ ááŚááŤááŤá á áŤáŁá˘áá˝á˘ á áá á ááŤá áĽáŤááłááą á¨áá¨á ááá¨á á¨áŤáą á¨áá á¨Keycloak á ááááŽá˝ áľáĽáľáĽ ááá¨ááá˘
á áá á˝áá ááľáĽ, ááá°ááá á ááŤá á áá áĽáá áĽáááá¨áłáá, áááľá. áá°á á ááá, áĽáá˛áá á áá¨á ááĽá¨áá˝ ááŤá¨á áŤááá á¨ááŁááľ áááľ áá áľáá˝ áááŠ, áĽááá á áááľ á ááŤáŽá˝ á áŠá áááľáľ ááľáĽ ááľáŹáľ ááááŤáłá áľááá. áĽáá° áĽáľá áá áŠá áááľáľ á¨á ááŤáł ááľ (Keycloak nodes) á áá áśá˝á á áááłá°á áá á˝áá á¨áá áľáᢠá¨á፠áľáĽáľáĽ áááľá¨á á áŁá á¨áŁáľ á áááá.
áĽáá˛áá áĽáŁááá ááá áŤáľá°áá áĽá áĽáł á¨á áááš áá¨á¨áť á á ááľ áá á áá°áŠ á¨áŞáá ááśá˝ áĄáľá áá áĽáť á°ááťá áĽáľá¨ááá áľá¨áľ á¨áŠá áááľáľ áááľá°áá ááĽááľ á áŤáľááááá˘
áá°á á á¨ááá áááľá°á
Keycloaká á áá áááł áááľáŹáľ á¨áá¨á°ááľá áŤáľáááááłá
- á¨áá á¨á፠áłáłá¤á á ááá
- á¨áááľ ááá áŤá
- á¨ááľáĽ á ááłá¨ áá¨áĽ á¨á áá ááá˛áŤáľáľ áľáá áá
á¨áá á˝áá ááá áľáááá á¨ááŞáá á¨ááἠááł á ááááŠá á áá°áá°ááᢠá ááľ áŚáł á¨áá°áŤ á¨ááἠááł áĽááłá áĽááľáĽ - áĽá á¨áĽáą áá á¨áááááľ ááĽáĽ á áá. á ááá áá áá ááἠáá° á¨á áŤáŁá˘ á°ááááŽá˝ áĽáá¨ááŤáá.
Keycloak áĽáá´áľ á á¨á¸á (HA) áááľá°á ááľáĽ áĽáá°áá°áŤ á á°áťá ááá¨áłáľáŁ ááá á Wildfly áááľá°á á˝ááłáá˝ áá áá áŤá á áĽáá°ááá°á ááá á áľááá ááá˘
Wildfly áĽá áááľ áľáááśá˝á áá ááá ᣠá ááłááśáš áĽáá° áááľ ááá áŤááááá ᣠá ááłááśáš áááá°á áŤáááááᢠá¨ááľ ááá á¨áááľá°á ááľááá ááááľ á¨áá á á áá á˛áŤá á¨áá°áá áŞáŤáá ááááľ áŤá¨áááŁáᣠáĽá á áááłáŤáą á ááłááľ á¨áááľá°á ááśá˝ áŁááłáŠá á¨áá°áá áŞáŤáá ááááľ áŤá¨áááŁáᢠá¨áĽááá áááľ áľáááśá˝ ááľáĽ á ááłááśáš á¨áá¨á°ááľ áá¸ááĄ-
-
mod_cluster
: ᨠApache áá á áá°áŁá á áĽáá° á¤á˝á˛á˛á áááľ ááá áá°áŤáᣠáááŁáŞ á áľá°ááá áááľ á TCP ááá˛áŤáľáľ áá á¨á°áá á¨á° ááᢠá ááŤá ááá áá°áŤáľ ááťáá. -
infinispan
JGroups áťááá˝á áĽáá° áááᣠááĽááĽá á áá áá á¨á°á¨ááá áá¸ááŤá˘ áĽáá° á ááŤáᣠá¨áá¸ááŤáá áááľ ááááłá°á á¨á᪠á¨á˘ááááľáá áááľá°á áá áááááᾠᨠHotRod ááŽáśáŽáá áá áá áá˝ááᢠ-
jgroups
á JGroups áťááá˝ áá á°ááľáá°á á á¨áá°á á°á¨á áááá á áááááśá˝ á¨áĄáľá áá á á áľááá áá°áŁáᢠá¨á°á°á¨á á§áá§áá˝ á áááľá°á ááľáĽ áŤá á¨áá°áá áŞáŤ ááłááá˝á á áĄáľá áĽáá˛ááá áŤáľá˝áá¸áá áá á áááááą áĽáá° á áľá°ááááᾠᣠáĽáááłáááľ áĽá ááľááľ áľáĽááľ áŤá áŁá áŞáá˝ á ááľá˘
á¨áááľ ááá
á Kubernetes áááľá°á ááľáĽ áááá áĽáá° ááľá -á°ááŁáŁáŞ á˛áá á¨áá¨á°ááľá áááŽá˝ áááľ ááľáĽ ááľááŁáľ á áľááá áá.
ᨠKeycloak áľáŤ á¨ááŤáááá°á á°áá áá á á¤á˝á˛á˛á á áŠá á¨áá¨áá፠á áááá áá á¨ááŤáááá á¨áááľ á áľáŤáť á¨á°áá áá áŽáááŠá°á áľáááá á¨á áá á áľáŤáť ááᢠáááá áĽá á¨ááá˘áŤ á
áá
áśá˝ HTTP áŤáľááá˝á á áľááá áááá á á ááŁá¸á X-Forwarded-For
и X-Forwarded-Proto
, áĽá áááá áááľ á áá HOST
. á¨á
áἠáá áľáŞáľ ingress-nginx
(> 0.22.0)
áŁáá˛áŤ ááá á proxy-address-forwarding
á¨á áŤáŁá˘á á°áááá á áááááľ PROXY_ADDRESS_FORWARDING
в true
Keycloak á¨ááŽáᲠááᣠáĽá¨áŽá áááá áĽáá˛áááἠáŤá°ááááá˘
áĽáá˛áá ááááľ áŤáľáááááłá á¨á°áŁá á ááá áááá˝ á ááá˘áŤá áá ᢠKeycloak á¨á áá á¨áá¨áá፠ááá-áá áĽá á¨á°á áá ááá-áá áá á¨á°ááá ááἠááá¨áá¸áľ ᨠInfinispan's á¨á°á¨ááá áá¸á፠áá áááᢠáá¸ááŤáá˝ á ááŁáŞ áá á áŁáá¤áľ áá¸áᣠá áá á áááá ፠á¨á°áá°á ááá áá á á ááłááľ á¨áááľá°á ááľááá ááááľ áá áá¨ááťá áĽá ááá˝ á áááá˝ á¨á፠ááá áá ááłá¨áť á¨ááá á áááľ áá á¨á á ááŁá¸áá˘
á á°ááá á¨á°ááśáš á á°ááŤá ááá ááá á¨áŠáŞá áľá áá ááŤáŤá ááĽá á áá°áŤáá˘
AUTH_SESSION_ID
. á¨ááá ááá áááááŠá á ááŽáłáᣠáľááá áá°ááŁáá ááá áá á¨á°áᨠá¨áŠáŞ áľá áĽáá˛ááᥠáĽááááŤááá˘
áŞááá ááááŞáŤ áááľ á¨á°á áá á¨á áľá°ááá
áľáá á áŤáááᢠAUTH_SESSION_ID
, áĽá á áŁá áŁáá áľáŞáľ ááľáĽ áŤáá áĽáŤááłááą ááľááá ááááľ á ááľ á áááľ á¨ááἠááł áľááá áá áĽáŤááłááłá¸á JAVA_OPTS
áááŞáŤáá˝ jboss.node.name
и jboss.tx.node.id
ááĽáŤááłááą ááľááá ááááľ áአ- áááłá, á¨ááłáá áľá áááááľ áá˝áá. á¨ááľ áľá áŤáľáááĽá - áľá 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
áá°ááááá.
á¨áá á ááłá¨ áá¨áĽ á¨á áá ááá˛áŤáľáľ áľáá áá
Weavenetá áĽáá° á¨áĽááľá CNI áĽá¨á°á áá á¨ááᣠááá˛áŤáľáľ áá˛áŤáá áá°áŤá - áĽá á¨áŞáá ááśá˝á áá áĽáá°á°ááą áĽá á˛á°áŠ áááááá˘
á áĽááľá Kubernetes áááľá°á ááľáĽ á¨á á á ááá˛áŤáľáľ áľáá á¨ááááľáŁ ááśá˝á áááááľ JGroupsá á¨ááá˝ ááŽáśáŽáá˝ áá áĽáá˛á°áŤ áááá áá˝ááá˘
á¨ááááŞáŤá á ááŤá áá áá áá KUBE_DNS
á¨áľáá áá ááá headless service
á¨áŞáá ááśá˝á áááááľ á ááá JGroups ááśá˝á áááááľ á¨áá á
ááá á¨á áááááľ áľá áŤáááá˘
ááá á ááŤá áá´áá áá áá áá KUBE_PING
ááśá˝á áááááľ á¨á¤áá á áá á áĽáŽ á¨áá°áŤ (áááá áŤáľáááááłá serviceAccount
á¨ááĽáśá˝ áá list
и get
, áĽá á¨á፠á¨áá
áá áááľáŤáľ ááľášá áŤáá
አserviceAccount
).
á áááá˝ áJGroups áĽáá´áľ áĽáá°áááá á¨á áŤáŁá˘ á°ááááŽá˝á á áááááľ á¨á°ááᨠááᢠJGROUPS_DISCOVERY_PROTOCOL
и JGROUPS_DISCOVERY_PROPERTIES
. á KUBE_PING
á áá á¨á
ááľ ááá¨áĽ áŤáľáááááłá namespace
и labels
.
ď¸ ááá˛áŤáľáľ á¨á°á áá áĽá áááľ ááá á¨á፠á áá á¨áŞáá áááľá°áá á á°ááłáłá á¨áŠá áááľáľ áááľá°á áŤááą (á áľá áŚáł á ááľ áĽáá á)
production
, ááŁáŠ, ááá°áá -staging
) - á¨á ááą á¨áŞáá áááľá°á á áááá˝ áá° áá ááá ááááá áá˝ááᢠá°ááááŽá˝á á áááá á ááĽáŤááłááą ááá áአá¨áá á¨áĽáá-áŤáľáľ á áľáŤáť áá áááá áŤá¨áááĄjboss.default.multicast.address
иjboss.modcluster.multicast.address
вJAVA_OPTS
.
á áá¨á ááĽá¨áá˝ ááŤá¨á ááŁááľ
áááááľ
Keycloak á ááá ááá ááśá˝ áá°áá¨áą ááĽáŤááłááą á¨ááἠááá¨á á áľá°ááá á ááŤáł á¨á°ááŤáŠ Infinispan áá¸á፠áľáĽáľáŚá˝á áá áááᢠáá á á°ááłáłá áá á á°ááŤáŠ á¨áá¨á ááĽá¨áá˝ ááľáĽ á Keycloak nodes ááŤá¨á ááá ááŠááľ á¨áá.
á áá¨á ááá¨áá˝ ááŤá¨á áááááá á¨áŞáá ááśá˝ ááŤá á¨á፠áłáł ááŞáľ (á˘ááááľáá á ááááŽá˝) áá áááᢠáááááľ á ááŽáśáŽá áá°á¨áľ áá°áŤá
á¨á˘ááááľáá áá¸ááŤáá˝ á¨áŁá
áŞá áá áááá á ááŁá¸á remoteStore
áá¨áá á áááľ ááľáĽ áĽáá˛á¨áá˝ (á áá á¨áá¨á ááĽá¨á ááľáĽ ᣠá áááľ á°ááá) áá¸ááŤáá˝. á JDG á ááááŽá˝ ááŤá¨á á¨á°áᨠá¨á˘ááááľáá ááááá˝ áľáá á áŁá˘áŤá áá á JDG1 áá á¨á°á¨áḠáá¨á site1
á áŁá˘áŤá áá áá° JDG2 áá°ááá site2
.
á áá¨á¨áťáŁ á°ááŁáá á¨JDG á áááá á¨áááľá°á áŞááá á ááááŽá˝á á á°áá á áááááľ áŤáłáááᣠáá
á á¨ááľáŽáľ ááŽáśáŽá áŁá
᪠ááᢠá¨ááá áŤáŁ á áááá˝ á áá°ááᢠsite2
á¨á˘ááááľáá áá¸ááŤáá˝á áŤááá áĽá á¨á°áᨠá¨á°á áá ááá áá á ááá ááśá˝ áá ááááᢠsite2
.
áĽáá˛áá áá ááłááľ áá¸ááŤáá˝ ááľáŹ áĽááłáááἠáĽá á Infinispan á áááá á áŠá áá¨áá áááá áá á áá áĽáᢠáááľ ááťáá ᢠáá
áá áááľá¨á á
ááĽáŠá ááľáááľ áŤáľáááááłá remote-store
á¨á°áá°á á¨á˘ááááľáá áá¸á፠(á ááá ááľáĽ ááĽáťá-ha.xml), á¨á፠á áá á¨á°áá°á replicated-cache
á¨á˘ááááľáá á áááá ááá á áŤáľááááá˘
áá¸ááŤáá˝á á áááááľ áá
á Keycloak ááľáĽ áááľ á áááľ áá¸ááŤáá˝ á ááĄ
-
á áŤáŁá˘áŤáᢠá¨áá á¨áą á á áἠáááá, á áá¨á ááą áá áŤááá áááľ áááááľ, áĽáá˛áá á¨ááá˝ áááá¨áľá áááááľ áŤááááá. áá ááááą áá¸á፠áááľáᣠá°áá áá˝áᣠáááá˝á áĽá á¨á°á ááá á˛á ááἠáŤá¨ááťáᢠáá áá¸á፠á¨áŞáá áááľá°á á áŤá á˘ááá áĽááł áá ááááą áá¸á፠á áá°áááᢠá áá¸ááŤá ááľáĽ á¨á°áá°á áá¤áľ á¨á°áá¨á¨ á¨ááἠáááĽááľ á áááľá°á ááľáĽ áá ááá˝ á ááááŽá˝ áááŤá ᣠá¨á፠á áá áá¤áą á¨áá¸ááŤá ááľáĽ á ááŤá°áľáᢠááá፠á°ááá¨áľ
work
áľá áá°áą á¨á áá áááá ááá፠á¨áá á áłá˝. -
ááŁá á¨áá˝áᢠá¨ááá áá á¨ááľáá áá¨áŤáá˝á áĽá ááá˝ áĽááśá˝á áááááľ á¨á°á áá ááá-áááá˝áᣠá¨ááľáá áá ááľáá°áŤáá˝á áĽá á¨áááŁáľ á áááłáŤáśá˝á áááŁá áŤáᢠá áĽááá áá¸ááŤáá˝ ááľáĽ á¨á°á¨áá¸á ááἠáááŤá ááᣠá RAM ááľáĽ áĽáť áá¨ááťáᣠááá áá á áááľá°á ááľáĽ ááŁá áá˝ááá˘
á¨á˘ááááľáá áá¸ááŤáá˝
ááá-áááá˝ - á Keycloak ááľáĽ áŤá á˝áá°-ááłáĽ ᣠá¨á°áአáá¸ááŤáὠᣠá¨áá áŠáľá˘ authenticationSessions
, á¨á°áá°á á°á áááá˝á ááἠááá¨áá¸áľ áŤááááá. á¨áĽááá
áá¸ááŤáá˝ á¨áááᥠáĽáŤááá˝ á áĽáááá áá á¨áááááľ á á áááŹá˝áá˝ áłááá á á áłáš áĽá á ááá ááá á ááááŽá˝ ááᢠáá
á á°áŁá á ááá-áááá˝ áá áŤáá áĽááááľ áĽáŤáąá á¨ááááĽá áľ áá, áĽá áĽáá°áá
áŤá áá¸ááŤáá˝ áĽáŤáłá¸á á áá-áá áááł áá áĽááłá áĽáá°áá ááľáá á áŤáľáááá¸áá.
á¨áľáááľ ááááśá˝. áá á˝áá°-ááłáĽáŁ áĽááá áá áá°ááŤáŠ áááłáá˝ áĽá
á áá á¨ááááᣠáááłá á°á ááá á ááľá ááá á á°áĽáłá¤ á¨ááááłá°á ááľá¨á á˛ááá ááᢠáááłá, á áá°áą áá
áľ forget password
áá¸á፠actionTokens
á°ááá
ááááśá˝á ááłáłáł ááá¨áłá°á áĽá
á áá áááá - áááłá ᣠááľáá°áŤá ááľááá áĽá
á áá ááá áĽá áĽáá°áá ááá á áá˝ááᢠáá
ááááą áá¸á፠á á°áááś á áłáł ááĽá¨áá˝ ááŤá¨á áá°áá á áá áľá˘
á¨á°á¨áḠááἠáá¸á፠áĽá ááá á¨ááŤá áá áľ áááąá á¨áá¨á ááą áá ááááłáľ áá°áŤáᢠáá
áá¸á፠á ááťá¸áá áŤáťá˝áá ááá áá ááá˝ á¨áá á˝ááá áá¨ááŤáᢠá ááľ á¨Keycloak á áááá áá¨ááá áŤáááᣠá¨á°ááŠáľ á ááááŽá˝ áá¸ááŤá¸áá áááá áĽáá˛á˝á ááłáá
á ááŁá¸áᢠKeycloak á¨á áŤáŁá˘ áá¸ááŤáá˝á áá ááá realms
, users
и authorization
á¨ááἠááłáá ááá¸ááĽ.
á¨á°áᨠáá¸ááŤá á áᢠwork
, á ááá á¨áá¨á ááĽá¨áá˝ áá áá°ááá. áĽáą áŤáą á¨áá¨á ááą ááá á áááľ áá¨á á áŤá¨áá˝á ᣠáá á¨ááἠáŤá¨á áááááśá˝á á áá¨á ááĽá¨áá˝ ááŤá¨á áá° áááľá°á ááśá˝ áááá áŤáááááᢠá áá á áááá áá áá¨áá áĽáá°á°ááá ᨠKeycloak node á áłáł ááĽá¨á ááľáĽ áá á áááá˝ áĽáá˛áá á ááá˝ á¨áá¨á ááśá˝ ááľáĽ áá á áááá˝ áááĽááľ áááŤáᢠáĽáá°áá
á áááľ áááĽááľ á¨á°á¨á° á áá áĽáŤááłááą ááľááá ááááľ á á áŤáŁá˘á áá¸ááŤáá˝ ááľáĽ áŤááá á°ááá
ááἠáŤá¸áłáá˘
á¨á°á áá ááá-áááá˝. áľáá˝ áŤáá¸á áá¸ááŤáá˝ sessions
, clientSessions
, offlineSessions
и offlineClientSessions
áĽááá áá á áá¨á ááĽá¨áá˝ ááŤá¨á ááŁáá áĽá á°á ááá á á áłáš ááľáĽ áá áá áłá áá áľááá á¨á°á áá ááá-áááá˝ ááἠááá¨áá¸áľ áŤáááááᢠáĽááá
áá¸ááŤáá˝ á¨áá á°á áááá˝ á¨ááᥠá¨á¤á˝á˛á˛á áĽáŤááá˝á á¨ááŤáľá°áááľ áá°áá áŞáŤ áá á áĽá¨á áá°áŤá ââ\uXNUMXb\uXNUMXbᣠáľááá
áĽááą á¨á°áŁá á ááá-áááá˝ áá á¨á°ááŤá áá¸á áĽá á áłáł ááĽá¨áá˝ ááŤá¨á áá°áá á ááŁá¸áá˘
á¨ááŤá ááá áĽá á. áá¸á፠loginFailures
á¨ááá˘áŤ áľá
á°áľ áááĽá ááá¨áłá°á áĽá
á áá ááááᣠáááłá á°á ááá á¨á°áłáłá° á¨ááá áá áŤáľááĄá áľ áá áĽááľá˘ á¨áá
áá¸á፠ááŁááľ á¨á áľá°áłáłáŞá áá. ááá áá ááľáááá áľááľ, á áá¨á ááĽá¨áá˝ ááŤá¨á ááŁááľá ááá á á áá áá. áá á áá á áŠá, áá
áá ááἠáŤáá°ááá, á ááááá ááťáťá áá˝áá, áĽá áá
áĽáŤá á¨á°ááł, ááŁááľ ááá°áŤ áá˝áá.
á¨á˘ááááľáá áááľá°á á áááá á áľ áá á¨áá¸á፠ááşáá˝á á á ááĽáŽá˝ ááá áá áá¨á á ááĽááľáĄ
<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" />
á¨ááá áááľá°áá á¨áááľá á ááľ á¨á˘ááááľáá áááľá°á áááá áĽá áááá á ááĽááľ
á¨á፠áááá áŤáľáááááłá 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
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
á˝áá á á áŤá°áá˝ á°á°ááá áááĽá á°ááá
áˇá
ááá: hab.com