下載安裝 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信息節點,造成重啟,連接失敗
上面的配置大家可以自己玩。目前不是研究太深。但是跨機器的集群是完全可以使用的。
