玩轉(zhuǎn)keycloak集群部署-協(xié)議JDBC_PING
下載安裝 Keycloak,建議安裝 keycloak 4.8.3 及以上版本,Keycloak 官網(wǎng)下載地址:https://www.keycloak.org/downloads
這里以 win64 系統(tǒng)為例,下載安裝 keycloak-4.8.3.Final.zip,需求的 Java 版本為 JDK 1.8及以上。下載完成后,解壓縮文件,雙擊運(yùn)行 keycloak-4.8.3.Final/bin 目錄下的 standalone.bat 文件,啟動(dòng) Keycloak。
Keycloak 的本地訪問(wèn)地址為:http://localhost:8080/auth/,訪問(wèn)該地址,點(diǎn)擊頁(yè)面中的“Administration Console“,創(chuàng)建 Keycloak 的管理員賬戶,該賬戶用于在 Keycloak 中進(jìn)行配置,管理用戶、角色等。
您可以通過(guò)以下方式配置使用 IP并更改 Keycloak 的端口:
在 keycloak-4.8.3.Final/bin 目錄下,執(zhí)行以下 DOS 命令:
standalone.bat -Djboss.socket.binding.port-offset=100 -Djboss.bind.address=192.168.112.172
- -Djboss.socket.binding.port-offset:設(shè)置端口偏移量,100表示默認(rèn)端口號(hào)+100,此時(shí) Keycloak 端口號(hào)更改為:8180
- -Djboss.bind.address:設(shè)置 Keycloak 所在機(jī)器的 IP 地址
?
如果你通過(guò)上面的步驟能打開(kāi)頁(yè)面。說(shuō)明你對(duì)部署keycloak有一定的熟悉了。我們使用keycloak的目的是什么呢?,為什么要用集群模式么?集群使用哪種模式?,怎么部署集群?
好多的問(wèn)題,和考驗(yàn)。因?yàn)閗eycloak目前并不是很開(kāi)放的原因,因此外界的文檔都不是很成熟的集群部署,好多文章都是復(fù)制粘貼官網(wǎng)的信息。然而官網(wǎng)的信息配置也只是大概,也不是完全能成功部署的,我這篇文章,來(lái)源本人花費(fèi)整整兩周的時(shí)間,一點(diǎn)一點(diǎn)的研究起來(lái)的。
先說(shuō)一下,集群的大概思想:
一。同步共享keycloak數(shù)據(jù)信息,如果共享,那就是接外數(shù)據(jù)庫(kù)。這個(gè)步驟網(wǎng)上不少,我是mysql數(shù)據(jù)庫(kù)。
二。數(shù)據(jù)同步共享以后,我們要解決session共享問(wèn)題。這個(gè)就是下面講解的通過(guò)JDBC_PING協(xié)議,同步信息
三。上面好多人對(duì)Jgroup協(xié)議不了解。官網(wǎng)推薦好多種。新手看著頭大。本人推薦用JDBC_PING協(xié)議。這個(gè)協(xié)議是跨機(jī)器信息同步。只需要連接一個(gè)共享mysql數(shù)據(jù)庫(kù),就可以解決我們
session同步的問(wèn)題,并且不用關(guān)心,節(jié)點(diǎn)發(fā)現(xiàn)、因?yàn)?。JDBC_PING協(xié)議已經(jīng)幫我們解決了這個(gè)大難題。那就是通過(guò)數(shù)據(jù)庫(kù)一張表評(píng)價(jià)jgroupping這個(gè)表
?
通過(guò)上面的思想以后,我們要在下面解決我們的難題:
一。啟動(dòng)
keycloak部署集群的方式 目前是通過(guò)。。standalone\configuration\standalone-ha.xml?這個(gè)模式配置文件啟動(dòng)的。
第一步就應(yīng)該難道好多人吧,啟動(dòng)命令:
就是通過(guò)bin\standalone.bat 啟動(dòng),上面說(shuō)過(guò)啟動(dòng)必須指定standalone-ha.xml 文件,這樣才是集群?jiǎn)?dòng)的方式。
啟動(dòng)方式直接給大家?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?
?
好對(duì)人對(duì)面的啟動(dòng)命令,不是很了解。JGROUPS_DISCOVERY_EXTERNAL_IP 是指定本地ip;?JGROUPS_DISCOVERY_PROTOCOL=JDBC_PING 是同步session按照J(rèn)DBC_PING 的方式啟動(dòng)。有了這兩個(gè)命令。我們才能玩轉(zhuǎn)session同步問(wèn)題
?
二。配置
上面把啟動(dòng)的方式告訴大家了。下面也是最難得,就是配置。配置的難度,按照上面的思想。下面同步數(shù)據(jù)配置:
跟著步驟走:
配置數(shù)據(jù)源信息:
1.先寫(xiě)一個(gè)module.xml

?
?
這個(gè)xml放置的問(wèn)題,如下面標(biāo)題的位置放置。沒(méi)有這個(gè)目錄自己創(chuàng)建

?
?
?
接著我們需要在我們的standalone-ha.xml 配置如下:
?

?
?
?
經(jīng)過(guò)以上的步驟我們就完成了,數(shù)據(jù)源共享的問(wèn)題:
?
二。session同步
?
下面才是最難的配置,這個(gè)也是目前我認(rèn)為keycloak的精華點(diǎn)。目前官網(wǎng)都有指導(dǎo),但是目前市場(chǎng)上面很難有一篇文章講清楚,玩轉(zhuǎn)這個(gè)的。我也是在摸索的情況下完成的,對(duì)JDBC_PING協(xié)議session共享的實(shí)現(xiàn)。
首先講解一下,為什么keycloak可以實(shí)現(xiàn)session共享,那就不得不說(shuō),keycloak內(nèi)部有一個(gè)好東西。那就是infinispan 分布式緩存。市場(chǎng)很難流行。但是就常常能在高端場(chǎng)景見(jiàn)到。
?
不像redis那樣流行,但就是一個(gè)好東西。分布式緩存。就是因?yàn)橛羞@個(gè)組件的存在,keycloak的內(nèi)部節(jié)點(diǎn)才能被通知,發(fā)現(xiàn)。也是因?yàn)檫@個(gè),keycloak的集群才能玩的起來(lái)。
因此懂infinispan 比較重要。owners 更是亮點(diǎn)簡(jiǎn)單配置
?

?
?
上面了解一下分布式內(nèi)存,下面我們就根據(jù)這個(gè)原理,開(kāi)始配置
三。配置JDBC_PING (重點(diǎn))--需要請(qǐng)聯(lián)系本人,因?yàn)檫@個(gè)配置是本人花費(fèi)兩周日夜研究的配置。---------很重要呦,不知道這個(gè)地方的配置,集群就無(wú)法玩轉(zhuǎn)session同步。
可以簡(jiǎn)單給點(diǎn)模糊配置

?
?
四。http通信為什么不能發(fā)現(xiàn)目標(biāo),而是報(bào)錯(cuò):

?
?如果大家遇到這個(gè)問(wèn)題,也請(qǐng)聯(lián)系本人。這個(gè)問(wèn)題。也是本人花費(fèi)了好幾天的時(shí)間研究出來(lái)的。
通信問(wèn)題
1、通信報(bào)錯(cuò)、
2,通信節(jié)點(diǎn)發(fā)現(xiàn)不了
3.節(jié)點(diǎn)之間退去程序無(wú)法刪除session信息節(jié)點(diǎn),造成重啟,連接失敗
?
上面的配置大家可以自己玩。目前不是研究太深。但是跨機(jī)器的集群是完全可以使用的。
