nginx叢集負責均衡利用redis實現共享session會話狀態,針對tomcat8
當前是隻針對tomcat8的部署,
如果你們的伺服器是tomcat7.x或7以下的版本,請看這個帖子:https://blog.csdn.net/hua1586981/article/details/78132710
目的
搭建好nginx負載均衡後,實現反向代理的叢集功能,當用戶訪問網站時,負載均衡會自動在多臺伺服器之間來回交替的呼叫,以確保達到負載均衡的效果,
問題
但是這裡有一個問題,就是session會話的儲存,筆者在搭建好nginx集群后,訪問網站是沒問題的,但登入之後再重新整理頁面,發現還是沒登陸的狀態,就這樣反覆登入了幾次都是未登入的狀態,百度瞭解到,原來是session會話的問題,你在A伺服器登入的,當你重新整理頁面後,nginx自動代理到了B伺服器,但是你的session會話在A伺服器中是已登入的狀態,在B伺服器是未登入的。所以就需要你在登入一次。
如圖:
解決辦法就是利用redis快取來統一儲存各服務的session會話,使用者訪問A服務後,伺服器會將使用者的會話狀態儲存到redis快取中,這時候使用者重新整理頁面,切換到B服務,B伺服器會先去redis快取中找是否已經有這個使用者的會話狀態,如果有了,直接取出來用,如果沒有 在建立一個
文字描述到此結束,上教程。。。
利用redis實現會話共享
1、說明
此demo用的是tomcat8,不同的tomcat版本會有不同的jar包。將會給到tomcat7的jar包和tomcat8的jar包。因為現在網上外掛不支援tomcat8。我提供的外掛jar包是更改原始碼後的jar。所以是OK的啦。此處注意:下載的jar包是放在tomcat/lib目錄下哦,並非工程的lib目錄下呢~
也可自行修改 RedisSessionManager.java 檔案
原始碼下載地址:https://github.com/jcoleman/tomcat-redis-session-manager
2、下載jar包
3、配置
更改tomcat/conf下context.xml檔案【context】節點下加如下程式碼【兩個tomcat配置檔案都要改哦】:
注:這是配置redis的連結資訊,如果沒有密碼可以把passowrd項去掉
注:這裡是tomcat8的配置程式碼,也就是此部落格所用到的配置
<Valve className="com.demo.redis_session.RedisSessionHandlerValve" /> <Manager className="com.demo.redis_session.RedisSessionManager" #這裡是redis伺服器地址 host="192.168.50.140" #這裡是redis埠,redis預設埠是6379 port="6379" #這裡是redis資料庫中的標識,標識第0個,預設使用0即可 database="0" #redis過期時間預設設定為60,單位是秒,session過期時間為30分鐘,所以設定為1800對應30分鐘 maxInactiveInterval="1800"/>
配置完記得重啟伺服器。
4、執行檢視效果
填寫test.jsp頁面已驗證是否成功
這是阿里雲伺服器上jsp
<html>
<head>
</head>
<body>
<h4 style="margin:10px;">11aliyun-sessionId = <%=session.getId() %> </h4>
</body>
</html>
這是騰訊雲伺服器上的jsp
<html>
<head>
</head>
<body>
<h4 style="margin:10px;">tenxunyun-sessionId = <%=session.getId() %> </h4>
</body>
</html>
檢視頁面效果,第一次重新整理,是阿里雲的伺服器
第二次重新整理,是騰訊雲的
我們可以看到,他們的sessionid是一樣的,這樣就實現了session共享
轉載於https://blog.csdn.net/hua1586981/article/details/78132710