Search code examples
dockersessionjbosskeycloakinfinispan

How to persist infinispan Session after Keycloak docker restart


I have a running keycloak 8's docker but whenever I restart it, all non-offline session disappears. Result, all users are being disconnected whenever I come to update keycloak.

Causes:

  • I've read this thread here and understood why access token aren't persisted (mainly performance issue).

As solution I've wanted to use Clusters (as recommended here), and I understood, that the core part is only well managing Infinispan.

Ideas:

  • I first wanted to store that infinispan outside docker container (in a volume), then search where does the JBoss saves Infinispan in a docker, but i didn't found anything.

  • Secondly I thought about an SPI to manage user sessions externally, but it seems not to be the right solution, as infinispan does already a good Job.

  • Setting up then a cluster, helped by this article about Cross-Datacenter support in Keycloak and this other one about Keycloak Cross Data Center Setup in AWS seemed to be a good starting point, but I'm still actually using dockers and I not sure if it's a better idea for me to build docker images from those tutorials.

Any more Idea would be welcome :)


Solution

  • Just yet I've tried using docker cluster a second time, but now using docker swarm with the info from here:

    The PING discovery protocol is used by default in udp stack (which is used by default in standalone-ha.xml). Since the Keycloak image runs in clustered mode by default, all you need to do is to run it:

    docker run jboss/keycloak

    If you run two instances of it locally, you will notice that they form a cluster.

    I've deployed very simply 3 instances of keycloak in clustered mode with an external database (postgres) using docker stack and it worked well.

    Simpler said, keycloak docker does already handle this use-case when using clusters.

    For more about the cluster use-case, please refer to this tutorial about how to setup Keycloak Cluster