通過前面一系列的文章介紹,關於cas的基本知識點大致介紹完了,今天講解一下cas中集群的部署。我們知道當訪問量越來越來多時,我們需要對cas服務的效能進行提公升,而通過集群的方式提高cas的服務效能是比較直接的。
在部署的服務中,通過使用nginx來實現負載均衡分發到cas具體的服務上,但是我們知道前端每次訪問時是隨機訪問分配的,所以就會出現session共享問題,同時在不同cas中的tgt分配的ticket也不同,因為預設ticket是儲存在記憶體中的。所以我們需要統一管理session和ticket來解決問題。
今天我們來講解一下cas的集群部署的使用,在開頭我們提到了session和ticket儲存管理的方式,在集群下目前使用redis方式,是比較流行和簡單的方式,所以今天我們採用這種方式來解決。
在前面的第五章,我們講解過service配置不同方式的持久化,這裡的session和ticket方式其實也大致類似,我們通過檢視官方文件,可以發現官方提供了多種不同ticket的持久化方式,包括:
一系列的操作方式,可以根據自己的需求選擇合適的方式即可,這裡我們採用redis配置。
首先引入具體的依賴:
org.apereo.cas
cas-server-support-redis-ticket-registry
$
##
# ticket registry配置
#cas.ticket.registry.redis.host=localhost
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.password=
cas.ticket.registry.redis.timeout=2000
cas.ticket.registry.redis.usessl=false
cas.ticket.registry.redis.usepool=true
cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxidle=8
cas.ticket.registry.redis.pool.minidle=0
cas.ticket.registry.redis.pool.maxactive=8
cas.ticket.registry.redis.pool.maxwait=-1
cas.ticket.registry.redis.pool.numtestsperevictionrun=0
cas.ticket.registry.redis.pool.softminevictableidletimemillis=0
cas.ticket.registry.redis.pool.minevictableidletimemillis=0
cas.ticket.registry.redis.pool.lifo=true
cas.ticket.registry.redis.pool.fairness=false
redis的位址和密碼更改給相應的配置即可,然後我們啟動cas服務。
當我們登入成功後,可以在redis相應的客戶端檢視到具體的資訊,如下:
同時當我們退出登入後,redis中的ticket也被銷毀掉了。
session的持久化和ticket類似,官方同時也為我們提供了多種方式可選。如下:
這裡我們選擇redis方式進行配置,同樣新增依賴。
org.apereo.cas
$
##
# session redis配置
#cas.webflow.autoconfigure=true
cas.webflow.alwayspauseredirect=false
cas.webflow.refresh=true
cas.webflow.redirectsamestate=false
cas.webflow.session.locktimeout=30
cas.webflow.session.compress=false
cas.webflow.session.maxconversations=5
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
同樣的將redis更改為相應的配置即可。重啟服務,可以發現redis中的session儲存在其中了。
現在我們測試一下集群環境下的cas是否可用,為了方便測試,我們關閉掉https,在tomcat中的server.xml配置了配置http的設定,這裡配置了8080和8081埠。
如果cas要使用http還需要配置,如下:
##
# 允許http配置
#cas.tgc.secure=false
cas.warningcookie.secure=false
重新啟動服務,現在我們啟動了2個cas服務來模擬集群情況,分別在8080和8081埠。
通過新增加密配置,如下:
cas.tgc.crypto.enabled=false
注意:使用redis進行session的快取的時候,起初沒有配置這個的時候(當然.signing.key和encryption.key也沒有配置)。發現進去無法進行共享session,這是因為cas每次啟動的時候會隨機生成這兩個key的值,這樣集群部署的時候就會出現這兩個值不一樣。當然除了配置false以外,還有一種方式就是將這兩個值賦予固定的值。
在nngix中主要配置upstream引數,預設按照輪詢排程的策略選擇組內伺服器處理請求。
在http模組下配置如下:
upstream cas
然後再在server模組中配置如下:
server
# .....
}
然後我們啟動nginx服務,訪問http://localhost:81/
,然後輸入資訊進行登陸。發現並不能成功登陸cas,如果我們更改nginx中的配置如下:
upstream cas
重啟nginx發現登入成功!!奇怪了為啥我們統一了session使用redis管理了,怎麼還需要配置ip_hash,那還不如不進行統一管理redis來管理session了。我們知道ip_hash是對每個請求按訪問的ip的hash結果分配,這樣每次客戶端ip固定訪問乙個後端伺服器,可以解決session的問題。
那是因為我們cas管理session沒起作用?我們嘗試更換http://localhost:8081
或http://localhost:8080
登入,重新整理其他頁面http://localhost:81
發現登入成功!然後退出乙個cas服務,其他所以cas服務都退出了。那說明redis中的session起作用了,可為啥還是不行?
這個是因為cas每次登入需要重新整理多次才可以登入成功,也就是登入過程發起了多次訪問。所以當第一次訪問http://localhost:8081
,第二次又跑到http://localhost:8080
,所以在http://localhost:81
登入總是失敗。
**例項:chapter11
cas 單點登入,集群部署遇到的問題總結
1 採用統一的ticket訪問策略,所有ticket的操作都從 快取redis中訪問。2 採用session共享,tomcat的session的訪問都從 快取redis中訪問。這一步可省略,我是將驗證碼放到了session中所以做session共享 參考文件 pom新增依賴 org.apereo.c...
CAS單點登入 單點登出 退出 登出(十二)
據說cas3.x開始支援單點登出,但我們目前講的是5.1.x,當然我們加入了單點登入,一般來說都需要單點登出的,讓個子系統支援單點登出需要做一些工作 logouttyle型別講解 cas退出流程分析 cas client單點退出配置 buji shiro pac4j 單點退出配置 重點目標 a系統需...
CAS單點登入
出現這個頁面說明服務端部署成功。cas預設的使用者名稱casuser,密碼 mellon,登陸成功 如果我們不希望用8080埠訪問cas,可以修改埠 1 修改tomcat的埠 開啟tomcat 目錄 conf server.xml 找到下面的配置 將埠8080,改為9000 2 修改cas配置檔案 ...