<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    如何在一個(gè)tomcat下的幾個(gè)web應(yīng)用之間共享session

    我們采取的是集中管理的辦法。主要技術(shù):

    1.設(shè)置Context 的crossContext="true",使得各個(gè)web應(yīng)用的servletcontext是可以互訪的

           <Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
    <Context path="/SessionManager" reloadable="true" crossContext="true"></Context>
    <Context path="/SessionManagerTest1" reloadable="true" crossContext="true"></Context>
    <Context path="/SessionManagerTest2" reloadable="true" crossContext="true"></Context>

    2.主動(dòng)設(shè)置cookies,設(shè)置jsessionid為被共享的session的id,統(tǒng)一利用requestsessionid在指定的一個(gè) servletcontext里的一個(gè)map查找對(duì)于的session,需要存取attribute都對(duì)取得的session操作

    3.用監(jiān)聽(tīng)器監(jiān)聽(tīng)屬性的失效



    Tomcat集群之Session復(fù)制配置 分享

    因?yàn)樽罱捻?xiàng)目要用到多web服務(wù)器實(shí)現(xiàn)訪問(wèn)負(fù)載和集群,負(fù)載調(diào)度使用的是LVS,而非apache的負(fù)載調(diào)度,因?yàn)樵诟咴L問(wèn)量和大并發(fā)量的時(shí)候LVS的 性能比APACHE好。然后在web服務(wù)器上是使用tomcat5.5.25做應(yīng)用服務(wù)器,對(duì)于tomcat的集群有兩種方式,這個(gè)主要是針對(duì) session而言的。一種就是sticky模式,即黏性會(huì)話模式;另外一種就是session復(fù)制模式了。所謂sticky模式就是說(shuō)同一個(gè)用戶的訪問(wèn) 請(qǐng)求都被派送到同一個(gè)tomcat實(shí)例上,這樣我們就無(wú)須在多臺(tái)服務(wù)器之間實(shí)現(xiàn)session共享了,這是其好處,不好的地方就是不能實(shí)現(xiàn) failureover了,一但用戶訪問(wèn)的機(jī)器掛掉,那么其session就會(huì)丟失。而session復(fù)制模式就可以很好的解決failureover的 問(wèn)題,即使某一臺(tái)web服務(wù)器掛掉了,用戶的請(qǐng)求還會(huì)被負(fù)載到其他的web服務(wù)器上,而且session也被復(fù)制了,這樣對(duì)用戶而言就像是在同一臺(tái)機(jī)器上 操作一樣,不好的地方就是session復(fù)制需要系統(tǒng)資源和網(wǎng)絡(luò)的開(kāi)銷,尤其是當(dāng)web服務(wù)器多的時(shí)候或session里存儲(chǔ)的數(shù)據(jù)量大的時(shí)候,這點(diǎn)將會(huì) 比較的明顯(不過(guò)自己還沒(méi)有做這方面的測(cè)試)。

    針對(duì)這兩種方式的弊端和好處,我們可以采用將兩種方式結(jié)合的方式來(lái)達(dá)到更好的效果,那 就是sticky+session復(fù)制模式了。用戶的請(qǐng)求按照 sticky方式被分發(fā)到同一個(gè)web服務(wù)器上,同時(shí)tomcat在后臺(tái)做異步復(fù)制(非同步)session到其他web服務(wù)器,這樣我們使用 sticky的簡(jiǎn)便性,同時(shí)又有了一定的容錯(cuò)能力。

    下面我就將自己的tomcat集群配置經(jīng)驗(yàn)跟大家分享一下,呵呵?,F(xiàn)在想來(lái),其實(shí)tomcat的集群配置真的是非常簡(jiǎn)單,幾乎不需要改什么東西了。我今天就在windows上用一臺(tái)機(jī)器來(lái)跑兩個(gè)tomcat實(shí)例,下面是一些基礎(chǔ)條件:
    1.兩個(gè)tomcat的目錄分別為:d:\apache-tomcat-5.5.25-node1和d:\apache-tomcat-5.5.25-node2
    2.在每個(gè)tomcat目錄下的conf\Catalina\localhost目錄下建立一個(gè)ROOT.xml文件,其內(nèi)容為:
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <Context docBase="D:/mywebapps/test1"
    3 privileged="true" antiResourceLocking="false" antiJARLocking="false" distributable="true">
    4 </Context>

    3.修改apache-tomcat-5.5.25-node1的connector端口為8091,修改apache-tomcat-5.5.25-node2的connector的端口為8092,這樣是為了避免在同一機(jī)器上同時(shí)啟動(dòng)時(shí)造成訪問(wèn)端口沖突;
    4.修改apache-tomcat-5.5.25-node2的Server端口為8006,與apache-tomcat-5.5.25-node1的Server端口8005不一樣,也是避免兩個(gè)tomcat實(shí)例啟動(dòng)時(shí)造成程序端口的沖突問(wèn)題;
    5.修改apache-tomcat-5.5.25-node2的AJP/1.3的端口為8019或其他非8009(默認(rèn))的端口,也是為了避免與apache-tomcat-5.5.25-node1的AJP/1.3端口沖突;

    這 樣,我們就可以保證每一個(gè)tomcat單獨(dú)啟動(dòng)時(shí)都可以提供D:/mywebapps/test1的web服務(wù),注意是單個(gè)啟動(dòng)哦,然后分別啟動(dòng) apache-tomcat-5.5.25-node1和apache-tomcat-5.5.25-node2后,輸入如下地址分別進(jìn)行訪問(wèn)你的web 應(yīng)用:
    apache-tomcat-5.5.25-node1的訪問(wèn)地址:http://localhost:8091/你的頁(yè)面地址
    apache-tomcat-5.5.25-node2的訪問(wèn)地址:http://localhost:8092/你的頁(yè)面地址
    如果你的tomcat沒(méi)能成功的提供服務(wù),那么你就需要查看一下是否tomcat部署成功了。注意這里的D:/mywebapps/test1就是你的web應(yīng)用的物理路徑了,可以隨意修改。下面就開(kāi)始對(duì)server.xml文件的配置了。

    找到apache-tomcat-5.5.25-node1目錄下的server.xml文件,打開(kāi)并找到配置Engine的位置,我們?cè)谧詈蠹尤?jvmRoute="node1",表示這個(gè)tomcat的實(shí)例名稱為node1。修改前后的對(duì)比如下:

    修改前:
    <Engine name="Catalina" defaultHost="localhost">
    修改后:
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">

    然 后找到Cluster標(biāo)簽,并取消它的注釋即可,無(wú)須做任何修改。同樣,我們修改apache-tomcat-5.5.25-node2下的 server.xml文件,修改jvmRoute="node2",然后也是注釋掉Cluster標(biāo)簽,注意,然后還要修改Cluster標(biāo)簽下的 Receiver標(biāo)簽的tcpListenPort端口號(hào),我們改為4002(默認(rèn)的是4001),這個(gè)是為了避免兩個(gè)tomcat實(shí)例同時(shí)啟動(dòng)時(shí)造成沖 突。

    通過(guò)上面的配置后,我們兩個(gè)tomcat已經(jīng)配置完畢,并且可以完成集群任務(wù)了。注意啟動(dòng)的時(shí)候不能直接雙擊其bing目錄下的 startup.bat文件,我們還需要為每一個(gè)tomcat設(shè)置環(huán)境變量,分別在apache-tomcat-5.5.25-node1和 apache-tomcat- 5.5.25-node2的根目錄下編寫一個(gè)bat文件,內(nèi)容如下:

    apache-tomcat-5.5.25-node1目錄下的startup_node1.bat內(nèi)容:
    set CATALINA_HOME=d:\apache-tomcat-5.5.25-node1
    bin/startup.bat

    apache-tomcat-5.5.25-node2目錄下的startup_node2.bat內(nèi)容:
    set CATALINA_HOME=d:\apache-tomcat-5.5.25-node2
    bin/startup.bat

    然后分別運(yùn)行這兩批處理文件即可正常啟動(dòng)tomcat了。我們先啟動(dòng)node1,雙擊startup_node1.bat啟動(dòng)node1。我們可以在窗口的最上面看到如下的輸出信息:
    2008-1-4 19:12:24 org.apache.catalina.cluster.tcp.SimpleTcpCluster start
    信息: Cluster is about to start
    2008-1-4 19:12:25 org.apache.catalina.cluster.tcp.ReplicationTransmitter start
    信息: Start ClusterSender at cluster Catalina:type=Cluster,host=localhost with n
    ame Catalina:type=ClusterSender,host=localhost
    2008-1-4 19:12:25 org.apache.catalina.cluster.mcast.McastServiceImpl setupSocket

    信息: Setting cluster mcast soTimeout to 500
    2008-1-4 19:12:25 org.apache.catalina.cluster.mcast.McastService start
    信息: Sleeping for 2000 milliseconds to establish cluster membership
    2008-1-4 19:12:27 org.apache.catalina.cluster.mcast.McastService registerMBean
    信息: membership mbean registered (Catalina:type=ClusterMembership,host=localhos
    t)
    2008-1-4 19:12:27 org.apache.catalina.cluster.deploy.FarmWarDeployer start
    信息: Cluster FarmWarDeployer started.
    2008-1-4 19:12:29 org.apache.catalina.cluster.session.DeltaManager start
    信息: Starting clustering manager...:
    2008-1-4 19:12:29 org.apache.catalina.cluster.session.DeltaManager start
    信息: Register manager to cluster element Host with name localhost
    2008-1-4 19:12:29 org.apache.catalina.cluster.session.DeltaManager start
    信息: Starting clustering manager at
    2008-1-4 19:12:29 org.apache.catalina.cluster.session.DeltaManager getAllCluster
    Sessions
    信息: Manager []: skipping state transfer. No members active in cluster group.

    這表明我們的tomcat集群已經(jīng)正常啟動(dòng)了。然后我們?cè)龠\(yùn)行apache-tomcat-5.5.25-node2目錄下的startup_node2.bat以啟動(dòng)node2。然后我們可以可以在窗口的最上方看到如下的信息輸出:
    2008-1-4 19:16:32 org.apache.catalina.cluster.tcp.SimpleTcpCluster start
    信息: Cluster is about to start
    2008-1-4 19:16:32 org.apache.catalina.cluster.tcp.ReplicationTransmitter start
    信息: Start ClusterSender at cluster Catalina:type=Cluster,host=localhost with n
    ame Catalina:type=ClusterSender,host=localhost
    2008-1-4 19:16:32 org.apache.catalina.cluster.mcast.McastServiceImpl setupSocket

    信息: Setting cluster mcast soTimeout to 500
    2008-1-4 19:16:32 org.apache.catalina.cluster.mcast.McastService start
    信息: Sleeping for 2000 milliseconds to establish cluster membership
    2008-1-4 19:16:32 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded
    信息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp
    ://192.168.1.227:4001,catalina,192.168.1.227,4001, alive=245203]
    2008-1-4 19:16:34 org.apache.catalina.cluster.mcast.McastService registerMBean
    信息: membership mbean registered (Catalina:type=ClusterMembership,host=localhos
    t)
    2008-1-4 19:16:34 org.apache.catalina.cluster.deploy.FarmWarDeployer start
    信息: Cluster FarmWarDeployer started.
    2008-1-4 19:16:35 org.apache.catalina.cluster.session.DeltaManager start
    信息: Starting clustering manager...:
    2008-1-4 19:16:35 org.apache.catalina.cluster.session.DeltaManager start
    信息: Register manager to cluster element Host with name localhost
    2008-1-4 19:16:35 org.apache.catalina.cluster.session.DeltaManager start
    信息: Starting clustering manager at
    2008-1-4 19:16:35 org.apache.catalina.cluster.session.DeltaManager getAllCluster
    Sessions
    警告: Manager [], requesting session state from org.apache.catalina.cluster.mcas
    t.McastMember[tcp://192.168.1.227:4001,catalina,192.168.1.227,4001, alive=248203
    ]. This operation will timeout if no session state has been received within 60 s
    econds.
    2008-1-4 19:16:35 org.apache.catalina.cluster.session.DeltaManager waitForSendAl
    lSessions

    請(qǐng)注意node2窗口輸出的不同顏色部分,這個(gè)已經(jīng)表示node2節(jié)點(diǎn)和node2節(jié)點(diǎn)聯(lián)系上了。我們?cè)倩剡^(guò)來(lái)看node1窗口的輸出信息,發(fā)現(xiàn)多出了如下的信息:
    2008-1-4 19:16:34 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded
    信息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp
    ://192.168.1.227:4002,catalina,192.168.1.227,4002, alive=0]
    這 表明node1也已經(jīng)偵聽(tīng)到了node2,兩個(gè)tomcat服務(wù)器已經(jīng)建立了聯(lián)系。然后我們?cè)L問(wèn)node1的一個(gè)地址A,假設(shè)這個(gè)地址A往 session里設(shè)置一個(gè)屬性,然后我們?cè)僭谕淮翱谥性L問(wèn)node2的一個(gè)地址B,假設(shè)B是從session里讀取這個(gè)屬性,我們會(huì)發(fā)現(xiàn)B地址確實(shí)得到 了這個(gè)剛剛我們?cè)趎ode1上設(shè)置進(jìn)去的值。這里要特別注意的是,我們兩個(gè)地址的分別訪問(wèn)必須是在同一個(gè)窗口中,因?yàn)槲覀儧](méi)有做前端的web負(fù)載,所以使 用不同的窗口進(jìn)行訪問(wèn)會(huì)出現(xiàn)不同的session(因?yàn)槎丝谔?hào)不一樣,也就導(dǎo)致訪問(wèn)地址不一樣了),這樣就導(dǎo)致無(wú)法查看的問(wèn)題。

    posted on 2009-03-06 14:23 SIMONE 閱讀(4761) 評(píng)論(3)  編輯  收藏 所屬分類: tomcat

    FeedBack:
    # re: tomcat下 共享session (摘自網(wǎng)上,沒(méi)有具體驗(yàn)證,如果哪位驗(yàn)證了,請(qǐng)告知一下謝謝)
    2009-03-06 23:19 | Jie
    關(guān)注  回復(fù)  更多評(píng)論
      
    # re: tomcat下 共享session (摘自網(wǎng)上,沒(méi)有具體驗(yàn)證,如果哪位驗(yàn)證了,請(qǐng)告知一下謝謝)
    2009-03-07 10:27 | stone2083
    不推薦使用tomcat默認(rèn)的session機(jī)制。
    基于內(nèi)存的session,無(wú)可避免GC帶來(lái)的問(wèn)題,何況在集群環(huán)境下,同步開(kāi)銷太大。
    推薦使用基于memcached,或者database的session。  回復(fù)  更多評(píng)論
      
    # re: tomcat下 共享session (摘自網(wǎng)上,沒(méi)有具體驗(yàn)證,如果哪位驗(yàn)證了,請(qǐng)告知一下謝謝)[未登錄](méi)
    2009-06-30 18:48 | ajax
    1.設(shè)置Context 的crossContext="true",使得各個(gè)web應(yīng)用的servletcontext是可以互訪的


    這種方法我試了可以
      回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 精品多毛少妇人妻AV免费久久| 亚洲精品无码人妻无码| 亚洲国色天香视频| 亚洲国产激情在线一区| 亚洲AⅤ男人的天堂在线观看| 一区二区三区免费在线视频 | 日韩国产欧美亚洲v片| 亚洲免费无码在线| 无码囯产精品一区二区免费| 国产h肉在线视频免费观看| 日本一道高清不卡免费| 亚洲精品无码Av人在线观看国产 | 中文无码亚洲精品字幕| 免费看美女午夜大片| 免费久久人人爽人人爽av | 9久9久女女免费精品视频在线观看| 午夜一级免费视频| 亚洲综合av永久无码精品一区二区| 久久精品国产亚洲AV麻豆网站| 亚洲欧美国产欧美色欲| 中国一级毛片视频免费看| 一个人看的www在线观看免费| 亚洲国产精品毛片av不卡在线| 午夜亚洲AV日韩AV无码大全| 亚洲av午夜电影在线观看| 一个人免费视频在线观看www| 一二三四影视在线看片免费| 国产亚洲?V无码?V男人的天堂 | 久久伊人亚洲AV无码网站| 亚洲激情电影在线| 国产青草亚洲香蕉精品久久| 日本免费电影一区二区| 日韩高清免费观看| 久久久久久亚洲精品中文字幕| 亚洲AV无码一区二区一二区| a毛片免费在线观看| 成人毛片免费观看视频在线| 亚洲国产综合无码一区| 亚洲a无码综合a国产av中文| 精品一区二区三区免费毛片爱| 亚洲国产成人久久综合区|