玩轉(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 文件,啟動 Keycloak。
Keycloak 的本地訪問地址為:http://localhost:8080/auth/,訪問該地址,點(diǎn)擊頁面中的“Administration Console“,創(chuàng)建 Keycloak 的管理員賬戶,該賬戶用于在 Keycloak 中進(jìn)行配置,管理用戶、角色等。
您可以通過以下方式配置使用 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)端口號+100,此時 Keycloak 端口號更改為:8180
- -Djboss.bind.address:設(shè)置 Keycloak 所在機(jī)器的 IP 地址
?
如果你通過上面的步驟能打開頁面。說明你對部署keycloak有一定的熟悉了。我們使用keycloak的目的是什么呢?,為什么要用集群模式么?集群使用哪種模式?,怎么部署集群?
好多的問題,和考驗。因為keycloak目前并不是很開放的原因,因此外界的文檔都不是很成熟的集群部署,好多文章都是復(fù)制粘貼官網(wǎng)的信息。然而官網(wǎng)的信息配置也只是大概,也不是完全能成功部署的,我這篇文章,來源本人花費(fèi)整整兩周的時間,一點(diǎn)一點(diǎn)的研究起來的。
先說一下,集群的大概思想:
一。同步共享keycloak數(shù)據(jù)信息,如果共享,那就是接外數(shù)據(jù)庫。這個步驟網(wǎng)上不少,我是mysql數(shù)據(jù)庫。
二。數(shù)據(jù)同步共享以后,我們要解決session共享問題。這個就是下面講解的通過JDBC_PING協(xié)議,同步信息
三。上面好多人對Jgroup協(xié)議不了解。官網(wǎng)推薦好多種。新手看著頭大。本人推薦用JDBC_PING協(xié)議。這個協(xié)議是跨機(jī)器信息同步。只需要連接一個共享mysql數(shù)據(jù)庫,就可以解決我們
session同步的問題,并且不用關(guān)心,節(jié)點(diǎn)發(fā)現(xiàn)、因為。JDBC_PING協(xié)議已經(jīng)幫我們解決了這個大難題。那就是通過數(shù)據(jù)庫一張表評價jgroupping這個表
?
通過上面的思想以后,我們要在下面解決我們的難題:
一。啟動
keycloak部署集群的方式 目前是通過。。standalone\configuration\standalone-ha.xml?這個模式配置文件啟動的。
第一步就應(yīng)該難道好多人吧,啟動命令:
就是通過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按照J(rèn)DBC_PING 的方式啟動。有了這兩個命令。我們才能玩轉(zhuǎn)session同步問題
?
二。配置
上面把啟動的方式告訴大家了。下面也是最難得,就是配置。配置的難度,按照上面的思想。下面同步數(shù)據(jù)配置:
跟著步驟走:
配置數(shù)據(jù)源信息:
1.先寫一個module.xml

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

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

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

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

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

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