keycloak 9 配置分布式缓存(高可用集群)

一. 介绍

  keycloak专为高可用和多节点集群设置而设计。当前的分布式缓存实现是建立在Infinispan之上的,Infinispan是一种高性能,可分布式的内存数据存储。

  Infinispan是开源的Key--value数据存储,可以容纳所有类型的数据,从java对象到纯文本。可以做缓存或持久数据存储。

  1.1 思考:在第8章已经部署了一个生产环境的Keycloak服务,如果再部署一台生产环境的keycloak服务,共用mysql数据库,为什么还要设置分布式缓存呢?下面来了解:

     当在开发模式下启动keycloak时,通过使用start-dev命令,keycloak仅使用本地缓存,并且通过隐式设置--cache=local选项完全禁用分布式缓存。

    本地缓存持久数据以避免不必要的数据库往返,默认情况下,领域、用户、授权都是本地缓存,最多缓存10000个条目,默认情况下本地密钥最多缓存1000个条目,并且默认为每小时过期一次。

    缓存的条目越多,服务器从数据库中获取数据的频率就越低,应该评估内存利用率和性能之间的权衡。

    本地缓存提高了性能,但在多节点设置中增加了挑战。当一个keycloak节点共享数据库中的数据时,其他节点都需要同步,否则全使其它节点缓存的数据无效。

    部署多节点集群后,身份验证会话、用户会话打在某台节点上,首先会缓存,如果是分布式缓存。其它节点都能同步。

  1.启用分布式缓存

    当在生产模式下启动keycloak时,通过使用该start 命令,将启用缓存并发现您网络中的所有keycloak节点。

    要显示启用分布式infinispan缓存,使用

bin/kc.[sh|bat] start --cache=ispn

  2.配置缓存可用性

    分布式缓存在集群中的节点子集上复制缓存条目,并将条目分配给固定所有者节点。每个分布式缓存默认有两个所有者,这意味着两个节点都有特定缓存条目的副本。当两个所有者节点都离线时,所有数据都将丢失。这种情况通常会导致用户在下一次请求时被注销并不得不重新登录。

    如果集群节点超过二个,可以手动配置所有者数量,更好的满足可用性要求,请打开分布式缓存conf/cache-ispn.xml的值并将其更改owners=<value>为您想要的值

    keycloak提供了一个缓存配置文件,位置是conf/cache-ispn.xml,如下所示

 二.具体实现

  2.1 准备条件:1)  二台节点(这里是centos8),分别装好docker, 二个节点内网ip为172.18.148.51,  172.18.148.50

         2)申请域名这里是keycloak.mogul-tech.com   

         3)申请SSL证书并且关联到该域名,完整访问域名:https://keycloak.mogul-tech.com/

         4)提供mysql数据库地址

  2.2 部署keycloak

    在二台节点,分别执行以下命令(由于8080已被占用,对外使用8081端口):

docker run -d -p 8081:8080  -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=Adm@kfk quay.io/keycloak/keycloak:20.0.1 start   --cache=ispn --proxy edge  --https-client-auth=none --hostname-admin-url=https://keycloak.xxx.com --hostname-strict-backchannel=false --hostname-strict=false  --db mysql  --db-url-host rm-xxxxf7ut8lvxa3771zo.mysql.rds.aliyuncs.com --db-url-port 3306 --db-username kcuser --db-password kcuser@keycloak#xxx --db-url-database keycloak --log=console,file 

    分别在二个节点,查看容器是否启动成功,以及查看容器日志

     可以在内网访问:http://172.18.148.51:8081, http://172.18.148.50:8081

  2.3 配置反向代理(阿里云负载)

    在负载服务器上关联域名,分发到内网二台(使用https 443端口分发),调度算法由默认的轮询 改为 源IP一致性哈希(目前由于Infinispan没有配置成功,所有调度算法不能用轮询)。

  2.4 访问web管理控制台

    二台浏览器先后访问: https://xxxx.com/  再登录, 二个浏览器下都能看到二个会话信息,如下所示:

 官方文档:配置分配式缓存 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值