問題未結(jié)
目的
將目前采用ip hash負(fù)載集群改為session復(fù)制的集群,實(shí)現(xiàn)用戶登錄訪問不受節(jié)點(diǎn)重啟影響。
簡述
網(wǎng)上搜索到的關(guān)于session復(fù)制的文章資料基本都是搭建,沒有關(guān)于恢復(fù)驗(yàn)證的介紹。目前實(shí)驗(yàn)方案也卡在tomcat集群節(jié)點(diǎn)重啟情況下的session未復(fù)制問題。另外從redis中讀取key值的內(nèi)容以及和開發(fā)討論有關(guān)用戶信息保存在哪里,也確認(rèn)是保存在session中,目前從日志中也沒有發(fā)現(xiàn)可以與session關(guān)聯(lián)的異常信息。
方案1:tomcat cluster
基于tomcat自有的tomcat集群,session在各個(gè)server之間保持同步復(fù)制。
配置要點(diǎn):
# tomcat的server.xml配置增加
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
# 應(yīng)用包內(nèi)的web.xml增加
<distributable/>
實(shí)驗(yàn)現(xiàn)象:
- 通過nginx負(fù)載訪問應(yīng)用時(shí),會發(fā)現(xiàn)兩個(gè)tomcat日志均在刷新,同時(shí)nginx日志的upstream也在兩個(gè)tomcat來回變化。
- 用戶登錄后,狀態(tài)始終保持。
- 后臺隨機(jī)停止一個(gè)tomcat,此時(shí)持續(xù)刷新用戶狀態(tài)仍然保持登錄狀態(tài)
- 再次啟動(dòng)該tomcat后,反復(fù)刷新點(diǎn)擊頁面會有一定幾率出現(xiàn)需要登錄的頁面, 說明之后啟動(dòng)的tomcat session信息不存在。
方案2: tomcat redis
配置要點(diǎn):
# 搭建redis server
# tomcat/lib下載三個(gè)相關(guān)的包:
tomcat-redis-session-manager-7.jar
commons-pool2-2.2.jar
jedis-2.5.2.jar
# conf/context.xml 增加redissession配置
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.100.202"
port="7710"
database="0"
maxInactiveInterval="60" />
實(shí)驗(yàn)現(xiàn)象:
- 現(xiàn)象同之前方案相同。
- 終端連接redis,有sessionID為key的鍵,查看其值大多數(shù)亂碼,但從個(gè)別可讀字符應(yīng)該是包含了當(dāng)前用戶信息的各種字段。