【问题标题】:How to persist infinispan Session after Keycloak docker restartKeycloak docker重启后如何保持infinispan Session
【发布时间】:2020-07-03 16:17:37
【问题描述】:

我有一个正在运行的 keycloak 8 的 docker,但是每当我重新启动它时,所有非离线会话都会消失。结果,每当我来更新keycloak时,所有用户都会断开连接。

原因:

  • 我在这里阅读了this thread 并理解了为什么不保留访问令牌(主要是性能问题)。

作为解决方案,我想使用集群(推荐 here),并且我理解,核心部分只是很好地管理 Infinispan。

想法:

  • 我首先想将那个 infinispan 存储在 docker 容器之外(在一个卷中),然后搜索 JBoss 在 docker 中将 Infinispan 保存在哪里,但我没有找到任何东西。

  • 其次,我想到了一个 SPI 来管理外部用户会话,但这似乎不是正确的解决方案,因为 infinispan 已经做得很好了。

  • this article about Cross-Datacenter support in Keycloakthis other one about Keycloak Cross Data Center Setup in AWS 的帮助下设置一个集群似乎是一个很好的起点,但我实际上仍在使用dockers,我不确定它是否对我来说是一个更好的主意这些教程中的 docker 图像。

欢迎任何更多的想法:)

【问题讨论】:

    标签: docker session jboss keycloak infinispan


    【解决方案1】:

    我已经尝试过第二次使用 docker 集群,但现在使用来自 here 的信息的 docker swarm:

    在 udp 堆栈中默认使用 PING 发现协议(在standalone-ha.xml 中默认使用)。由于 Keycloak 镜像默认运行在集群模式下,所以你需要做的就是运行它:

    docker run jboss/keycloak

    如果您在本地运行它的两个实例,您会注意到它们形成了一个集群。

    我已经使用 docker stack 在集群模式下部署了非常简单的 3 个 keycloak 实例,并带有一个外部数据库 (postgres),它运行良好。

    简单地说,keycloak docker 在使用集群时已经处理了这个用例。

    有关集群用例的更多信息,请参阅本教程了解如何setup Keycloak Cluster

    【讨论】:

    • 感谢您的信息。但是您是如何开启用户会话持久性的呢? Postgres 数据库不保证您在 infinispan 中的会话在 docker 重启后仍然有效。
    • 当集群中有一个实例Keycloak在运行时,重启后它不会存活。但是,如果您有多个实例,每个实例都将连接到 infinispan,从而维护用户会话。请记住,如果您在另一个实例完全启动之前重新启动一个实例,您仍然会丢失用户会话
    猜你喜欢
    • 2020-10-05
    • 2014-11-04
    • 2020-07-17
    • 2015-09-06
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多