集群中的session共享問題解決方案

2022-03-02 22:26:10 字數 3566 閱讀 6916

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某台伺服器宕機,則自動剔除故障機器,使使用者訪問不受影響。

指定輪詢權重,weight值越大,分配到的機率就越高,主要用於後端每台伺服器效能不均衡的情況。

每個請求按訪問ip的雜湊結果分配,這樣每個訪客固定訪問乙個後端伺服器,可以有效的解決動態網頁存在的session共享問題。(此為解決session共享的一種方式)

更智慧型的乙個負載均衡演算法,此演算法可以根據頁面大小和載入時間長短智慧型地進行負載均衡,也就是根據後端伺服器的響應時間來分配請求,響應時間短的優先分配。如果想要使用此排程演算法,需要nginx的upstream_fair模組。

按訪問url的雜湊結果來分配請求,使每個url定向到同一台後端伺服器,可以進一步提高後端快取伺服器的效率。如果想要使用此排程演算法,需要nginx的hash軟體包。

思路:因為ip_hash策略的結果是同一ip會訪問同一臺伺服器,實際上session並沒有共享,只是因為同一ip會一直訪問一台伺服器,自然不存在共享的問題。那麼可想而知,換個ip,session並沒有共享。

nginx配置示例:

upstream test

server

}

思路:直接讓在集群中的伺服器中都複製乙份session唄,那麼不管反代採用的是負載均衡策略,都不會出現session丟失的問題。 

tomcat配置為如下兩個步驟:

① 修改server.xml中的cluster節點

② 修改應用的web.xml,增加節點:

兩步實際上用的是tomcat自帶的集群。

配置示例:

這篇寫的不錯。

思路:用redis統一快取session,我們的應用需要連線到redis,用redis裡的session就好了。下面是使用filter的原理。

(配置context.xml也可以,可以看下  或者

優缺點

配置步驟:

① 增加redis client和spring session的依賴(pom.xml)

<

dependency

>

<

groupid

>org.springframework.session

groupid

>

<

artifactid

>spring-session-data-redis

artifactid

>

<

version

>1.2.1.release

version

>

dependency

>

<

dependency

>

<

groupid

>redis.clients

groupid

>

<

artifactid

>jedis

artifactid

>

<

version

>2.8.1

version

>

dependency

>

②  修改web.xml,增加filter,注意:這個filter必須寫到最前面

③ 修改spring配置檔案,在容器中注入spring session和redis相關的bean。

需要注意的地方:

tomcat集群session共享

才疏學淺且語無倫次,如有誤人子弟,深表歉意 一台tomcat不夠用時,要麼換更好的機器,要麼加機器做集群。做集群就會涉及到負載均衡,比如nginx,會把到來的每個請求按一定的規則 給後端tomcat,這就有乙個逃避不了的問題需要解決,使用者的session需要在不同的tomcat之間共享。比較偷懶的...

WebSocket 集群 session 共享方案

本文聊天室基於 websocket 進行實現,同時也為解決websocket session在集群部署服務時的無法共享導致的收發訊息問題。當我們使用 websocket 實現聊天時,後端服務會將所有的 websocket session快取起來,之後根據收到的訊息,遍歷或者找到某個session進行...

tomcat集群session共享

tomcat集群配置其實很簡單,在tomcat自帶的文件中有詳細的說明 docs cluster howto.html 只不過是英語的,對我這樣的人來說很難懂 下面根據說下怎麼配置吧 第一步 準備工作 準備幾份tomcat程式,比如分別叫tomcat1 tomcat2 如果各tomcat程式放在不同...