日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tomcat实现session集群及tomcat+memcached共享session存储(四)

發(fā)布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tomcat实现session集群及tomcat+memcached共享session存储(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

接博客nginx或httpd實(shí)現(xiàn)負(fù)載均衡tomcat(三)

tomcat實(shí)現(xiàn)會話管理原理及實(shí)現(xiàn):

tomcat管理會話使用的專用的會話管理組件,tomcat的會話管理器有4種:

1、標(biāo)準(zhǔn)會話管理器(StanderdManager

2、持久會話管理器(PersistentManager可以基于文件存儲(FileStore)JDBC存儲(JDBCStore)

????????????? 基于JDBC的話就可以實(shí)現(xiàn)高可用tomcatsession集群。

1、DeltaManager會話管理器

2、BackupManager會話管理器

?

StanderdManager會話管理原理是tomcat節(jié)點(diǎn)主機(jī)會將客戶端的session信息自己保存在主機(jī)文件中,默認(rèn)保存于$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中,當(dāng)tomcat實(shí)例出現(xiàn)故障后能夠從此文件中加載會話信息,而不至于導(dǎo)致信息丟失。

?????? 優(yōu)點(diǎn):能夠在一定程度上實(shí)現(xiàn)session保存,

?????? 缺點(diǎn):session會話信息只能夠當(dāng)前tomcat實(shí)例使用,而無法讓其他tomcat實(shí)例加載,因此也不具備高可用的功能。

?

?PersistentManager 持久會話管理器原理是:tomcat能夠?qū)?/span>session會話信息持久保存在指的文件中或者數(shù)據(jù)庫中,但是此中會話管理依然只是能夠加載自己實(shí)例的會話信息,而不能夠加載其他實(shí)例的會話信息,使用主備模式時的tomcat備用節(jié)點(diǎn)可以從共享文件存儲文件或者數(shù)據(jù)庫中加載此tomcat實(shí)例的會話信息,從而實(shí)現(xiàn)tomcat的高可用。

?????? cornsync+pacemaker+nfsmysql)實(shí)現(xiàn)tomcat的高可用。

?

DeltaManager會話管理器原理是tomcat集群使用deltamanager在各節(jié)點(diǎn)中通過專門的多播地址來傳遞信息,并通過此多播信道傳遞每一個節(jié)點(diǎn)各自的session會話,將其保存在內(nèi)存中,因此每一個節(jié)點(diǎn)都擁有集群中所有每一個節(jié)點(diǎn)的session會話信息,當(dāng)一個節(jié)點(diǎn)down掉,可以將用戶的請求重定向到其他節(jié)點(diǎn),因此也能夠?qū)崿F(xiàn)高可用的功能。是實(shí)現(xiàn)sessioncluster的方法。

?????? 優(yōu)點(diǎn):session信息在每一個節(jié)點(diǎn)中保存有所有集群節(jié)點(diǎn)的會話信息,不會因?yàn)槟骋粋€節(jié)點(diǎn)出現(xiàn)問題導(dǎo)致客戶端的會話信息丟失。前端可以使用任何調(diào)度算法實(shí)現(xiàn)負(fù)載均衡。

?????? 缺點(diǎn):因?yàn)橐褂枚嗖鬟f,所有這種情況下集群的規(guī)模不能太大,有數(shù)量限制,另一方面,所有的session信息也是保存在內(nèi)存中的,當(dāng)出現(xiàn)斷電會其他原因?qū)е滤泄?jié)點(diǎn)down機(jī)是,重啟依舊會丟失所有會話信息。適用大規(guī)模集群因此使用的場景很少。

?

3、BackupManager會話管理器原理是:這種集群需要兩個節(jié)點(diǎn)互相做主備組,backipmanager管理器會自動管理實(shí)現(xiàn)這兩個節(jié)點(diǎn)的高可用,而對前端調(diào)度器來說這兩個節(jié)點(diǎn)被當(dāng)做一個節(jié)點(diǎn)組使用,調(diào)度器調(diào)度是是調(diào)度到不同的組,每組內(nèi)部自己實(shí)現(xiàn)session的高可用,因此每組內(nèi)的對外的ip地址是在組內(nèi)兩個主備節(jié)點(diǎn)之間流動的,而這種流動是靠此會話管理器來實(shí)現(xiàn)的。前端調(diào)度器不能使用nginx,可以使用httpd

缺點(diǎn):部署拓?fù)浣Y(jié)構(gòu)難,因此只有在小規(guī)模的集群中偶爾使用。

?

?

各種會話管理器實(shí)現(xiàn)的配置方法:

標(biāo)準(zhǔn)會話管理器(StandardManager)

<ManagerclassName="org.apache.catalina.session.StandardManager"

????????maxInactiveInterval="7200"/>

?

默認(rèn)保存于$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中。

?

maxActiveSessions:最多允許的活動會話數(shù)量,默認(rèn)為-1,表示不限制;

maxInactiveInterval:非活動的會話超時時長,默認(rèn)為60s

pathname:會話文件的保存目錄;

?

持久會話管理器(PersistentManager)

將會話數(shù)據(jù)保存至持久存儲中,并且能在服務(wù)器意外中止后重新啟動時重新加載這些會話信息。持久會話管理器支持將會話保存至文件存儲(FileStore)JDBC存儲(JDBCStore)中。

?

保存至文件中的示例:

<ManagerclassName="org.apache.catalina.session.PersistentManager"

? saveOnRestart="true">

? <Store className="org.apache.catalina.session.FileStore"

???directory="/data/tomcat-sessions"/>

</Manager>

?

每個用戶的會話會被保存至directory指定的目錄中的文件中,文件名為<session id>.session,并通過后臺線程每隔一段時間(checkInterval參數(shù)定義,默認(rèn)為60)檢查一次超時會話。

?

保存至JDBCStore中的示例:

<ManagerclassName="org.apache.catalina.session.PersistentManager"

? saveOnRestart="true">

? <StoreclassName="org.apache.catalina.session.JDBCStore"

???driverName="com.mysql.jdbc.Driver"

???connectionURL="jdbc:mysql://localhost:3306/mydb?user=jb;password=pw"/>

</Manager>

?

?

不論是標(biāo)準(zhǔn)會話管理區(qū)還是持久會話管理器,它所能加載的都是自己的session保存的會話信息,而不能實(shí)現(xiàn)加載其他的tomcat保存的會話信息,要實(shí)現(xiàn)能夠加載其他tomcat主機(jī)的session會話信息,需要使用到tomcatsession復(fù)制功能或者使用共享存儲來保持所有tomcat主機(jī)的會話信息。

?

實(shí)例六:設(shè)置后端tomcat服務(wù)器的session集群以實(shí)現(xiàn)共享session

?

?

說明:前端調(diào)度器使用基于http_proxy模塊反向代理后端tomcatsession集群。

后端tomcat主機(jī)只用DeltaManager會話管理器。

負(fù)載均衡配置基于上面的http_balance實(shí)現(xiàn),使用http-1.1與后端tomcat實(shí)現(xiàn)通信。

session-cluster配置如下:

在各tomcat節(jié)點(diǎn)的配置文件中添加如下配置項(xiàng):(如下配置可以定義在engin組件內(nèi)或者host組件內(nèi),主要是作用范圍的區(qū)別!)

[root@tomcat1 conf]# vim server.xml

<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"

???????????????? channelSendOptions="8">

?

?????????<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

??????????????????expireSessionsOnShutdown="false"

??????????????????notifyListenersOnReplication="true"/>

?

?????????<Channel className="org.apache.catalina.tribes.group.GroupChannel">

???????????<MembershipclassName="org.apache.catalina.tribes.membership.McastService"

???????????????????????address="228.0.1.9"

??????????????????????? port="45564"

???????????????????????frequency="500"

??????????????????????? dropTime="3000"/>

???????????<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

?????????????????????address="172.16.249.204"

????????????????????? port="4000"

????????????????????? autoBind="100"

????????????????????? selectorTimeout="5000"

?????????????????????maxThreads="6"/>

?

???????????<SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

????????????? <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

???????????</Sender>

???????????<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

???????????<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

?????????</Channel>

?

?????????<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

???????????????? filter=""/>

?????????<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

?

?????????<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

???? ???????????????tempDir="/tmp/war-temp/"

???????????????????deployDir="/tmp/war-deploy/"

???????????????????watchDir="/tmp/war-listen/"

???????????????????watchEnabled="false"/>

?

?????????<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

???????</Cluster>

?

然后在webapp的目錄下修改WEB-INF/web.xml文件(也可以修改默認(rèn)的web.xml文件)

添加中添加

???????????????????? <distributable/>

注意:如果使用mod_jk模塊來實(shí)現(xiàn)的話需要再tomcat的配置文件中添加<Engin name=”Catalina”jvmRoute=”note01” >,這個jvmRoute的名稱要和此主機(jī)的jvm的名稱一致。

tomcatsession集群實(shí)際上也是實(shí)現(xiàn)了高可用的功能。

?

實(shí)例七:使用msmmemcache-session-manager)實(shí)現(xiàn)tomcat會話存儲在session服務(wù)器

?

?

首先在兩個節(jié)點(diǎn)主機(jī)上安裝安裝memcached服務(wù)

[root@lpw4 tomcat]# yum install memcached

?

并都啟動memcached服務(wù)


tomcat要先配置使用memcached的作為session服務(wù)需要安裝以下幾個軟件包:

注意:這里需要根據(jù)tomcat的安裝版本選擇相應(yīng)的軟件包版本:

javolution-5.4.3.1.jar

memcached-session-manager-1.8.3.jar

memcached-session-manager-tc8-1.8.3.jar

msm-javolution-serializer-1.8.3.jar

spymemcached-2.11.1.jar

?

將這些包復(fù)制在tomcatlib目錄下

然后開始配置tomcat

修改tomcat的主配置文件server.xml文件,在自定義的host組件的中添加以下內(nèi)容:

??????????????? <Context path="webapp"docBase="/myweb/webapp/Root" reloadable="true" >

???????????????????????? <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

???????????????????????memcachedNodes="n1:172.16.249.204:11211,n2:172.16.249.203:11211"

???????????????????????failoverNodes="n1"

???????????????????????requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

???????????????????????transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

?????????????? </Context>


前方調(diào)度器依然使用nginx調(diào)度:配置文件和之前的不變。

?

測試:在瀏覽器中輸入可以看到無論怎么調(diào)度,返回的信息都是由memcached節(jié)點(diǎn)返回的信息。


?

?

?


轉(zhuǎn)載于:https://blog.51cto.com/qikexing/1709452

總結(jié)

以上是生活随笔為你收集整理的tomcat实现session集群及tomcat+memcached共享session存储(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。