天天看點

基于Redis叢集的tomcat叢集Session共享

        Tomcat使用Redis緩存Session,集中把Session緩存到Redis伺服器中,而不是緩存到伺服器的記憶體中,可以實作叢集伺服器共享Session。

        應用場景:

            1.當網站接收大量請求時,單一伺服器終究無法滿足需要處理的負荷量

            2.伺服器不穩定(莫名其妙的當機等),搭建tomcat叢集救急。

            3.項目更新疊代時,不影響項目的正常運作

        Tomcat叢集中任何一台機器的下線或上線, 能夠不影響整個叢集對外的一緻性.并且具有較好的擴充性還有容錯能力。到目前為止,官方支援Tomcat6和Tomcat7,Tomcat8目前還沒有正式支援。

實作原理圖示:

基于Redis叢集的tomcat叢集Session共享

預設已經安裝了redis和tomcat,沒有安裝可參考tomcat配置:redis安裝    tomcat安裝

基于Redis叢集的tomcat叢集Session共享

nginx配置:

基于Redis叢集的tomcat叢集Session共享

在Tomcat目錄的lib下,添加相關jar包,并修改相關的配置檔案(這個支援tomcat 8 以及redis 3.0,參考readMe.txt)

下載下傳連結:TomcatRedisSessionManager

網盤下載下傳:TomcatRedisSessionManager

可以下載下傳TomcatRedisSessionManager-1.0.zip包,解壓後包括所需的jar包和配置檔案。如下所示:

基于Redis叢集的tomcat叢集Session共享
基于Redis叢集的tomcat叢集Session共享
基于Redis叢集的tomcat叢集Session共享

1) 将上面jar包拷貝到各個tomcat的lib目錄下, 将redis-data-cache.properties拷到tomcat的conf目錄下。

2) 配置檔案修改

(1)  修改redis-data-cache.properties配置檔案如下:

        # redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....

        redis.hosts=10.0.192.64:6379 (redis伺服器IP及端口号)

        # Redis Password

        redis.password= redis (REDIS配置檔案中設定的密碼)

        # set true to enable redis cluster mode (叢集設定為true)

        redis.cluster.enabled=false

(2)在tomcat/conf/context.xml檔案中增加以下兩行:

        <Valve className="com.r.tomcat.session.management.RequestSessionHandlerValve"/>

        <Manager className="com.r.tomcat.session.management.RequestSessionManager"/>

(3)設定tomcat/conf/web.xml 中 session有效期(感覺這個不很重要,預設設定的時間是30,大約在591行)

        <session-config>

                <session-timeout>60<session-timeout>

        <session-config>

啟動:先啟動redis,再啟動 tomcat叢集,nginx等。

基于Redis叢集的tomcat叢集Session共享
基于Redis叢集的tomcat叢集Session共享

簡單測試: 用自己的index.jsp替換 tomcat/webapps/ROOT/index.jsp 檔案

下載下傳 index.jsp

基于Redis叢集的tomcat叢集Session共享

關閉 Apache-Tomcat-7.0.88-2伺服器後,nginx通路的是Apache-Tomcat-7.0.88-1伺服器

基于Redis叢集的tomcat叢集Session共享

還可以擷取到Apache-Tomcat-7.0.88-2的session資料,查詢redis,會發現redis鍵值都是加密資料

到這,可以算是結束了吧!

繼續閱讀