热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Keycloak:专用Infinispan群集的远程存储配置

如何解决《Keycloak:专用Infinispan群集的远程存储配置》经验,您有什么比较好的解决方法?

最近,我加强了Keycloak部署,以使用专用的Infinispan群集作为remote-storeKeycloak各种缓存的额外持久层。更改本身进行得相当不错,尽管进行了更改之后,由于expired_code错误消息,我们开始看到很多登录错误:

WARN [org.keycloak.events] (default task-2007) type=LOGIN_ERROR, realmId=my-realm, clientId=null, userId=null, ipAddress=192.168.50.38, error=expired_code, restart_after_timeout=true

通常,在同一时间段内从同一IP地址重复多次多次出现此错误消息。造成这种情况的原因似乎是最终用户的浏览器在登录时会无限重定向,直到浏览器本身停止循环为止。

我已经看到了各种GitHub问题(https://github.com/helm/charts/issues/8355),也记录了此行为,并且共识似乎是这是由Keycloak群集无法正确发现其成员引起的通过JGroups。

当您考虑到某些Keycloak缓存在中的默认配置中分布在Keycloak节点上时,此解释才有意义standalone-ha.xml。但是,我已将这些高速缓存修改为本地高速缓存,并remote-store指向我的新Infinispan群集,并且我认为我对该运行方式做出了一些不正确的假设,导致此错误开始发生。

这是我的Keycloak缓存配置的方式:

WARN [org.keycloak.events] (default task-2007) type=LOGIN_ERROR, realmId=my-realm, clientId=null, userId=null, ipAddress=192.168.50.38, error=expired_code, restart_after_timeout=true

请注意,与默认standalone-ha.xml配置文件相比,此缓存配置的大部分保持不变。我在这里所做的更改是将以下缓存更改为local并将它们指向我的远程Infinispan群集:

sessions

authenticationSessions

offlineSessions

clientSessions

offlineClientSessions

loginFailures

actionTokens

work

这是我的remote-cache服务器的配置:


    
        
        
            
        
        
            
        
        
            
        
        
            
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
        
            
                
                    true
                
                
                    org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory
                
            
        
    
    
        
        
            
        
    
    
        
        
            
            
            
        
    
    
        
        
            
            
            
        
    
    
        
        
            
            
        
        
            
            
            
        
        
    

这是在Infinispan端配置我的缓存的方式:


    
    
        
    

我相信我对带有远程存储的本地缓存的工作方式做出了一些错误的假设,我希望有人能够为我解决这个问题。我的意图是使Infinispan群集成为Keycloak所有缓存的真实来源。通过将每个缓存都设置为本地,我假设数据将通过Infinispan集群复制到每个Keycloak节点,这样,对本地authenticationSessions缓存的写入keycloak-0keycloak-1通过Infinispan集群同步持久化。

我认为正在发生的事情是,就将那个值持久保存到远程Infinispan群集而言,对Keycloak上的本地缓存的写入并不同步。换句话说,对authenticationSessions高速缓存执行写操作时,在等待将此值写入Infinispan群集时不会阻塞,因此在另一个Keycloak节点上立即读取此数据会导致本地和本地发生高速缓存未命中。 Infinispan集群。

我正在寻找一些帮助来确定为什么当前配置导致了此问题,并澄清了remote-store- 的行为-是否有办法将缓存写入由a支持的本地缓存remote-store以使其同步?如果没有,是否有更好的方法来完成我要在这里完成的工作?

其他一些潜在的相关细节:

Keycloak和Infinispan都被部署到Kubernetes集群中的相同名称空间。

我正在KUBE_PING用于JGroups发现。

使用Infinispan控制台,我可以验证复制到所有Infinispan节点的所有缓存中是否包含一定数量的条目-它们并未完全使用。

如果将新领域添加到一个Keycloak节点,它将成功显示在其他Keycloak节点上,这使我相信work缓存将在所有Keycloak节点之间传播。

如果我登录到一个Keycloak节点,则我的会话仍保留在其他Keycloak节点上,这使我相信与会话相关的缓存将在所有Keycloak节点上传播。

我使用Keycloak的粘性会话作为对此的临时解决方案,但是我认为解决这些潜在的缓存问题是一种更永久的解决方案。

提前致谢!


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍如何使用 Sortable.js 库实现元素的拖拽和位置交换功能。Sortable.js 是一个轻量级、无依赖的 JavaScript 库,支持拖拽排序、动画效果和多种插件扩展。通过简单的配置和事件处理,可以轻松实现复杂的功能。 ... [详细]
author-avatar
奇奇丶承诺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有