<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)論
      
    主站蜘蛛池模板: 国产成人涩涩涩视频在线观看免费| 久久久久女教师免费一区| 亚洲精品一卡2卡3卡三卡四卡| 在线观看亚洲精品国产| 亚洲成aⅴ人片久青草影院| 国产一区二区三区无码免费| 国产精品国产午夜免费福利看| 国产高清在线免费| 四虎国产精品免费久久影院| 免费国产综合视频在线看| 免费国产怡红院在线观看| 亚洲高清成人一区二区三区| 亚洲精品国产va在线观看蜜芽| 久久久久亚洲爆乳少妇无 | 一区二区三区视频免费| 无套内谢孕妇毛片免费看看| sss日本免费完整版在线观看| 一个人免费观看www视频| 久久久久久久久久免免费精品| 国产免费无码AV片在线观看不卡 | 亚洲男人天堂2022| 亚洲人成色77777在线观看| 亚洲AV噜噜一区二区三区| 日韩在线视频线视频免费网站| av片在线观看永久免费| 免费在线中文日本| **一级毛片免费完整视| 亚洲第一成年免费网站| 免费乱码中文字幕网站| 亚洲人成网77777亚洲色| 亚洲人成在线影院| 国产成人精品日本亚洲网址| 亚洲AV成人无码久久WWW| 好湿好大好紧好爽免费视频| 久久爰www免费人成| 最近最新的免费中文字幕| 国产乱人免费视频| 国产精品亚洲一区二区三区在线| 久久综合亚洲色HEZYO社区| 亚洲综合色一区二区三区| 人妻巨大乳hd免费看|