tomcat集群session的復制和實現

  • 時間:2018-09-22 22:50 作者:波波說運維 來源:波波說運維 閱讀:114
  • 掃一掃,手機訪問
摘要:問:跨服務器tomcat集群是如何才能實現session共享的,sessionID是存放在每個tomcat中,怎樣關聯?Apache Tomcat 5.5 Servlet/JSP 容器怎么配制集群?session復制是怎么實現的,以及怎么配置它?要在Tomcat 5.5容器里進行session復制,
問:跨服務器tomcat集群是如何才能實現session共享的,sessionID是存放在每個tomcat中,怎樣關聯?Apache Tomcat 5.5 Servlet/JSP 容器怎么配制集群?session復制是怎么實現的,以及怎么配置它?
tomcat集群session的復制和實現


要在Tomcat 5.5容器里進行session復制,必需完成下列步驟:

所有會話屬性值必需實現java.io.Serializable

把server.xml文件里的群集(Cluster)元素的注釋取消(Uncomment)

把server.xml文件里的Valve(ReplicationValve)元素注釋取消(Uncomment)

假如有多個Tomcat實例在一臺機器上運行,確保每個實例的tcpListenPort屬性值是不沖突的。

確定 web.xml 中含有 元素, 或者者設置

確定設置好Engine元素的 jvmRoute 的屬性值:

確定所有節點擁有相同的時間, 并且通過網絡時間服務(NTP)同步操作系統的時間!

確定負載均衡器已經配置為黏性會話模式.

注意:記住你的會話狀態是被一個cookie跟蹤的,所以你的URL從外面看必需是相同的,否則一個新的session就會被產生。

注意:集群支持目前需要JDK 1.4或者其后版本。

要在Tomcat里實現會話session復制,下面三種方法都可以實現相同效果:

使用session 持久化, 并將 session 保存到一個共享的文件系統(持久管理器 + 文件存儲)

使用session 持久化, 并將 session 保存到一個共享的 數據庫 (持久管理器 + JDBC存儲)

使用in-memory-replication,使用和Tomcat 5自帶的SimpleTcpCluster(server/lib/catalina-cluster.jar)


應用場景:

在這個場景中,計劃使用兩個tomcat 實例 TomcatA 和 TomcatB. 我們將覆蓋下面連續的事件:

TomcatA 接受一個請求,session S1 被產生,TomcatB 接受一個session S1的請求 ,TomcatA 接受一個請求,session ( S1 )失效。 TomcatB 接受一個新的session ( S2 )的請求。 TomcatA 由于沒有活動session S2過期失效。


在session復制時代碼里發生的所有事情

1)Tomcat 標準方式啟動

當 Host 對象被創立之后, 一個 cluster 對象與它關聯. 當上下文被解析完, 假如 web.xml中有distributable元素, Tomcat 通過 Cluster class (in this case SimpleTcpCluster)為支持復制的上下文創立一個管理器. 因而通過設置web.xml中的distributable來啟用集群。 Tomcat 將為上下文創立 DeltaManager萊取代 StandardManager. cluster class 將啟動 a membership service (multicast) 和 a replication service (tcp unicast). More on the architecture further down in this document.

2)TomcatB 啟動

當TomcatB啟動時,除了一個例外以外,它按照TomcatA一樣的順序啟動。群集被啟用,并將建立一組會員(TomcatA,TomcatB)。TomcatB現在將要request已經存在于群集里的服務器的會話狀態,在這里這個服務器是TomcatA。TomcatA回應TomcatB的請求,并且在TomcatB開始為HTTP requests監聽之前,這個狀態已經由TomcatA傳遞給TomcatB了。在TomcatA不回應的情況下,TomcatB在60秒后中斷,并發出一個日志記錄。對于每個已經分布在web.xml里的web應用程序,會話狀態會被轉移。注意:要有效地使用會話復制,你的所有tomcat實例要配置成一樣的。

3)TomcatA 接受一個請求,session S1 被產生。

TomcatA對待傳遞來的請求與對待沒有會話復制一樣。當請求完成以后,活動就開始了,ReplicationValve在回應被返回到客戶那里之前會截斷這個請求。在這時,它發現會話被修改過,它就用TCP把這個會話復制給TomcatB。一旦這個分段的數據被遞交給操作系統TCP logic,請求就通過valve pipeline返回給客戶。對于每個請求,整個會話都被復制,這允許在不調用setAttribute 或者 removeAttribute情況下,在會話中修改屬性的代碼被復制。配置參數useDirtyFlag可以被用來優化會話復制的次數。

4)TomcatA崩潰

當TomcatA崩潰時,TomcatB會收到通知說TomcatA已經退出群集。TomcatB把TomcatA從它的會員列單中刪除掉,TomcatB里有任何更改也不會再通知TomcatA。裝載均衡器會把對TomcatA的請求引向TomcatB以及所有當前活動會話。

5)TomcatB 接受一個session S1的請求

TomcatB像解決其余任何請求一樣解決這個請求。

TomcatA啟動時,在它接受新的請求以及讓它自己可被使用之前,它要按照上面 1) 2)中所形容的順序進行啟動。它會加入群集,與TomcatB聯絡,理解所有會話的當前狀態。一旦它接受到會話狀態,它就完成裝載并打開它的HTTP/mod_jk ports。所以在TomcatA接受到來自TomcatB的會話狀態之前,不會對它發出請求。

6)TomcatA 接受一個請求,session ( S1 )失效。

失效的呼叫被阻攔,這個會話就加入到失效的會話行列。在這個請求完成以后,它向TomcatB發出一個"expire"信息,TomcatB也把這個會話變為失效。

7)TomcatB 接受一個新的session ( S2 )的請求。

與步驟3)情形一樣。

8)TomcatA 由于沒有活動session S2過期失效。

就如一個會話由客戶讓它無效一樣,invalidate呼叫被阻攔到,這個會話就加入失效的會話行列。這一點上,除非另一個請求通過系統來檢查失效行列,會話失效不會在其余地方重復。


Phuuuhh! :)

Membership Clustering membership可以通過使用非常簡單的multicast pings被建立。每個Tomcat實例定期會發出multicast ping,在ping message里,這個實例會散布它的IP 及 TCP 監聽端口以用于復制。假如一個實例在所給的時間范圍內還沒有收到這樣的ping,這個會員就被認為是不存在了。很簡單,也很有效。當然,你需要在你的系統上讓multicasting可被使用。

TCP Replication,在收到一個multicast ping以后,會員就被增加到群集里。在下一個復制請求時,發出請求的實例將使用host和port信息來建立一個TCP socket。通過使用這個socket,它把分段的數據發送過去。選擇TCP sockets 的起因是它具有有流量控制,并確保發送到位。當發送數據時,這個數據就會被送到。

Distributed locking and pages using frames: Tomcat 并沒有讓會話實例在群集之間保持一致。這個邏輯的實現需要太大空間,也會帶來很多問題。假如你的用戶使用多個請求同時訪問同一個會話,那么最后一個請求會覆蓋群集里的其它會話。


tomcat集群session的復制和實現

  • 全部評論(0)
最新發布的資訊信息
【系統環境|】淘碼庫,據消息稱已被調查。淘碼庫源碼網,已經無法訪問!(2020-01-14 04:13)
【系統環境|服務器應用】Discuz隱藏后臺admin.php網址修改路徑(2019-12-16 16:48)
【系統環境|服務器應用】2020新網站如何讓百度快速收錄網站首頁最新方法,親測有用!免費(2019-12-16 16:46)
【系統環境|服務器應用】Discuz發布帖子時默認顯示第一個主題分類的修改方法(2019-12-09 00:13)
【系統環境|軟件環境】Android | App內存優化 之 內存泄漏 要點概述 以及 處理實戰(2019-12-04 14:27)
【系統環境|軟件環境】MySQL InnoDB 事務(2019-12-04 14:26)
【系統環境|軟件環境】vue-router(單頁面應用控制中心)常見用法(2019-12-04 14:26)
【系統環境|軟件環境】Linux中的Kill命令(2019-12-04 14:26)
【系統環境|軟件環境】Linux 入門時必學60個文件解決命令(2019-12-04 14:26)
【系統環境|軟件環境】更新版ThreeJS 3D粒子波浪動畫(2019-12-04 14:26)
手機二維碼手機訪問領取大禮包
返回頂部
双色球号码300期遗传走势图