玩转keycloak集群部署-协议JDBC_PING
下载安装 Keycloak,建议安装 keycloak 4.8.3 及以上版本,Keycloak 官网下载地址:https://www.keycloak.org/downloads
这里以 win64 系统为例,下载安装 keycloak-4.8.3.Final.zip,需求的 Java 版本为 JDK 1.8及以上。下载完成后,解压缩文件,双击运行 keycloak-4.8.3.Final/bin 目录下的 standalone.bat 文件,启动 Keycloak。
Keycloak 的本地访问地址为:http://localhost:8080/auth/,访问该地址,点击页面中的“Administration Console“,创建 Keycloak 的管理员账户,该账户用于在 Keycloak 中进行配置,管理用户、角色等。
您可以通过以下方式配置使用 IP并更改 Keycloak 的端口:
在 keycloak-4.8.3.Final/bin 目录下,执行以下 DOS 命令:
standalone.bat -Djboss.socket.binding.port-offset=100 -Djboss.bind.address=192.168.112.172
- -Djboss.socket.binding.port-offset:设置端口偏移量,100表示默认端口号+100,此时 Keycloak 端口号更改为:8180
- -Djboss.bind.address:设置 Keycloak 所在机器的 IP 地址
如果你通过上面的步骤能打开页面。说明你对部署keycloak有一定的熟悉了。我们使用keycloak的目的是什么呢?,为什么要用集群模式么?集群使用哪种模式?,怎么部署集群?
好多的问题,和考验。因为keycloak目前并不是很开放的原因,因此外界的文档都不是很成熟的集群部署,好多文章都是复制粘贴官网的信息。然而官网的信息配置也只是大概,也不是完全能成功部署的,我这篇文章,来源本人花费整整两周的时间,一点一点的研究起来的。
先说一下,集群的大概思想:
一。同步共享keycloak数据信息,如果共享,那就是接外数据库。这个步骤网上不少,我是mysql数据库。
二。数据同步共享以后,我们要解决session共享问题。这个就是下面讲解的通过JDBC_PING协议,同步信息
三。上面好多人对Jgroup协议不了解。官网推荐好多种。新手看着头大。本人推荐用JDBC_PING协议。这个协议是跨机器信息同步。只需要连接一个共享mysql数据库,就可以解决我们
session同步的问题,并且不用关心,节点发现、因为。JDBC_PING协议已经帮我们解决了这个大难题。那就是通过数据库一张表评价jgroupping这个表
通过上面的思想以后,我们要在下面解决我们的难题:
一。启动
keycloak部署集群的方式 目前是通过。。standalone\configuration\standalone-ha.xml 这个模式配置文件启动的。
第一步就应该难道好多人吧,启动命令:
就是通过bin\standalone.bat 启动,上面说过启动必须指定standalone-ha.xml 文件,这样才是集群启动的方式。
启动方式直接给大家 bin\standalone.bat --server-config=standalone-ha.xml -DJGROUPS_DISCOVERY_EXTERNAL_IP=192.168.1.107 -DJGROUPS_DISCOVERY_PROTOCOL=JDBC_PING -Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8
好对人对面的启动命令,不是很了解。JGROUPS_DISCOVERY_EXTERNAL_IP 是指定本地ip; JGROUPS_DISCOVERY_PROTOCOL=JDBC_PING 是同步session按照JDBC_PING 的方式启动。有了这两个命令。我们才能玩转session同步问题
二。配置
上面把启动的方式告诉大家了。下面也是最难得,就是配置。配置的难度,按照上面的思想。下面同步数据配置:
跟着步骤走:
配置数据源信息:
1.先写一个module.xml
这个xml放置的问题,如下面标题的位置放置。没有这个目录自己创建
接着我们需要在我们的standalone-ha.xml 配置如下:
经过以上的步骤我们就完成了,数据源共享的问题:
二。session同步
下面才是最难的配置,这个也是目前我认为keycloak的精华点。目前官网都有指导,但是目前市场上面很难有一篇文章讲清楚,玩转这个的。我也是在摸索的情况下完成的,对JDBC_PING协议session共享的实现。
首先讲解一下,为什么keycloak可以实现session共享,那就不得不说,keycloak内部有一个好东西。那就是infinispan 分布式缓存。市场很难流行。但是就常常能在高端场景见到。
不像redis那样流行,但就是一个好东西。分布式缓存。就是因为有这个组件的存在,keycloak的内部节点才能被通知,发现。也是因为这个,keycloak的集群才能玩的起来。
因此懂infinispan 比较重要。owners 更是亮点简单配置
上面了解一下分布式内存,下面我们就根据这个原理,开始配置
三。配置JDBC_PING (重点)--需要请联系本人,因为这个配置是本人花费两周日夜研究的配置。---------很重要呦,不知道这个地方的配置,集群就无法玩转session同步。
可以简单给点模糊配置
四。http通信为什么不能发现目标,而是报错:
如果大家遇到这个问题,也请联系本人。这个问题。也是本人花费了好几天的时间研究出来的。
通信问题
1、通信报错、
2,通信节点发现不了
3.节点之间退去程序无法删除session信息节点,造成重启,连接失败
上面的配置大家可以自己玩。目前不是研究太深。但是跨机器的集群是完全可以使用的。