一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

tomcat集群(共享session)

 集微筆記 2013-12-24


    其實(shí)就是上述這樣的一個(gè)架構(gòu),下面是原理   

    1)  Apache裝有一個(gè)模塊,這個(gè)模塊叫mod_jk   
2)  Apache通過(guò)80端口負(fù)責(zé)解析任何靜態(tài)web內(nèi)容

    3)  任何不能解析的內(nèi)容,用表達(dá)式告訴mod_jk,讓mod_jk派發(fā)給相關(guān)的app server去解釋。   

    通過(guò)上述的文字描述我們可以得知:   

    1) 我們需要在Apache中先裝一個(gè)mod_jk   

    2) 我們需要在httpd.conf中寫(xiě)點(diǎn)表達(dá)式   

    下面來(lái)實(shí)現(xiàn)。   

    1)  把mod_jk.so手工copy進(jìn)我們的Apache安裝目錄的modules目錄下   

    下載地址  http://www./dist/tomcat/tomcat-connectors/jk/binaries/windows/   

 


 
####### Apache整合Tomcat start #######

    #此處mod_jk的文件為你下載的文件
    LoadModule jk_module modules/mod_jk.so
    #指定tomcat監(jiān)聽(tīng)配置文件地址
    JKWorkersFile conf/workers.properties
    #指定日志存放位置
    JkLogFile logs/mod_jk.log
    JkLogLevel info

    <VirtualHost localhost>
        ServerAdmin localhost
        DocumentRoot "D:\www"
        ServerName localhost
        
        SetEnv force-proxy-request-1.0.1
        SetEnv proxy-nokeepalive 1
        
        DirectoryIndex index.html index.htm index.jsp index.action
        ErrorLog logs/shsc-error_log.txt
        CustomLog logs/shsc-access_log.txt common
        JkMount /*WEB-INF ajp13
        JkMount /*j_spring_security_check ajp13
        JkMount /*.action ajp13
        JkMount /servlet/* ajp13
        JkMount /*.jsp ajp13
        JkMount /*.do ajp13
        JkMount /*.action ajp13
        JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13
        JkMount /fckeditor/editor/filemanager/connectors/* ajp13
    </VirtualHost>

    ####### Apache整合Tomcat end #######

    


    Apache    conf
    目錄下 建個(gè)    workers.properties
    文件 內(nèi)容如下: 


 

   

     
ps=    worker.list=ajp13 #模塊版本
    worker.ajp13.port=8009 #工作端口,若沒(méi)占用則不用修改
    worker.ajp13.host=localhost #本機(jī),若上面的Apache主機(jī)不為localhost,作相應(yīng)修改
    worker.ajp13.type=ajp13 #類(lèi)型
    #worker.ajp13.lbfactor=1 #代理數(shù),不用修改

            

   

 

 


   

    集群配置 tomcat6
   

    第一種,simple tcp cluster (tomcat5以上版本自帶的基于tcp廣播技術(shù)的集群,這種方法比較簡(jiǎn)單,只需修改server.xml配置文件即可)   

    在<Engine></Engine>添加如下配置代碼,多臺(tái)機(jī)器,只需修改第二個(gè) address (本機(jī)地址)和port 即可。 


 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">

  <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6" />
  <!--
    <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
  -->
  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="   192.168.67.143" port="   4001" selectorTimeout="100" maxThreads="6" />

    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
    </Sender>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor" />
  </Channel>

  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false" />

  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />

 


      注意:在 Tomcat的集群復(fù)制中,分為DeltaManager和BackupManager兩種,前者適合于小型系統(tǒng),任何情況下,均進(jìn)行Session復(fù) 制,消耗大量資源。所以,我們應(yīng)該采用BackupManager,僅在需要的時(shí)候(Tomcat掛掉的時(shí)候)進(jìn)行Session復(fù)制。如果是在同一臺(tái)機(jī)器上配置多個(gè)tomcat實(shí)例來(lái)進(jìn)行集群的測(cè)試,那么請(qǐng)一定要注意tomcat實(shí)例運(yùn)行的端口和 集群所監(jiān)聽(tīng)的端口是否沖突!   

   
     

   

   
    最后修改web應(yīng)用WEB-INF目錄下的    web.xml
    文件 在    </web-app>
    前加    <distributable />
   

       標(biāo)簽(這個(gè)是tomcat進(jìn)行session復(fù)制所必須的,否則session不能進(jìn)行復(fù)制?。?nbsp;  

          或者
    改變Tomcat的content.xml配置文件,修改 <Context distributable="true">   

 


 

   tomcat的集群部署修改動(dòng)作都比較簡(jiǎn)單,但實(shí)際在運(yùn)行過(guò)程中會(huì)出現(xiàn)一系列的問(wèn)題,我這里列舉我在配置后使用過(guò)程中出現(xiàn)的一些問(wèn)題和要點(diǎn),供大家參考:


 

1、用戶(hù)存入SESSION中的數(shù)據(jù)的問(wèn)題


 

      使用tomcat集群進(jìn)行SESSION復(fù)制,必須要保證你的session中存放的所有對(duì)象都是實(shí)現(xiàn)了java.io.Serializable接口 的,因?yàn)閟ession復(fù)制就是序列化對(duì)象到其他WEB應(yīng)用服務(wù)器上的,所以如果沒(méi)有實(shí)現(xiàn)該接口,那么SESSION同步將會(huì)失敗。另外一點(diǎn),就是如果要 同步的機(jī)器比較多的話,那么要注意保證SESSION中存放的數(shù)據(jù)比較小,不要什么都存放到SESSION中,因?yàn)閺?fù)制SESSION也是需要開(kāi)銷(xiāo)的,數(shù) 據(jù)越大開(kāi)銷(xiāo)也越大。


 

2、Tomcat執(zhí)行SESSION復(fù)制的觸發(fā)條件


 

      我們?cè)趖omcat的server.xml文件中集群部分cluster標(biāo)簽中可以看到屬性:useDirtyFlag, 如果這個(gè)設(shè)置為true(默認(rèn)的),那么只有當(dāng)使用setAttribute往session中設(shè)置數(shù)據(jù)的時(shí)候才會(huì)同步其他WEB服務(wù)器的 SESSION,如果為false,那么每一次請(qǐng)求的sesison都會(huì)被同步到其他服務(wù)器上。因此在操作SESSION的時(shí)候要特別注意,避免出現(xiàn) SESSION無(wú)法同步的問(wèn)題。


 

      舉個(gè)簡(jiǎn)單的例子,比如我們?cè)趩螜C(jī)應(yīng)用情況下修改SESSION中用戶(hù)的某一個(gè)數(shù)據(jù),那么通常就是:


 

   

     

           

  1.          

    User user = (User)request.getSession().getAttribute(“user”);


           

  2.        

  3.          

    User.setName(“my name”);


           

  4.      

   

 

 

      這樣我們就是直接存取出來(lái),然后進(jìn)行修改,雖然在單機(jī)情況下沒(méi)有問(wèn)題,但是在集群條件下,這樣就導(dǎo)致了多臺(tái)WEB服務(wù)器上的SESSION不同步的問(wèn) 題,因?yàn)镾ESSION并沒(méi)有改變,Tomcat無(wú)法監(jiān)視session中某個(gè)數(shù)據(jù)的值是否發(fā)生了變化。因此,我們還需要執(zhí)行如下操作以保證 SESSION的同步:


 

   

     

           

  1.          

    request.getSession().setAttribute(“user”, user);


           

  2.      

   

 

 

      所以,我們?cè)诓僮鱏ESSION的時(shí)候要特別注意!另外的建議就是,我們應(yīng)該盡可能的不要修改SESSION中的數(shù)據(jù)。


 

      因?yàn)門(mén)omcat的SESSION復(fù)制通信是通過(guò)組播功能來(lái)實(shí)現(xiàn)不同服務(wù)器之間的交互的,所以需要在服務(wù)器上開(kāi)通組播功能,windows默認(rèn)情況下是開(kāi)通組播服務(wù)的,而Linux系統(tǒng)下默認(rèn)是沒(méi)有開(kāi)通的,我們需要通過(guò)如下命令來(lái)開(kāi)通其組播功能:


 

   

     

           

  1.          

    route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0


           

  2.      

   

 

 

    如果需要服務(wù)器啟動(dòng)時(shí)即開(kāi)通組播需在/etc/sysconfig/static-routes文件內(nèi)加入eht0 net 224.0.0.0 netmask 240.0.0.0。具體組播概念請(qǐng)查閱CCNP相關(guān)內(nèi)容。


 


    可以通過(guò)netstate -g 來(lái)查看組播狀態(tài),也可以在route -e 命令中看到   

        

        

    第二種,使用memcached共享session   

    memcached-session-manager 配置   

    讓tomcat 調(diào)用memcached 來(lái)存儲(chǔ)session 早就是一個(gè)很成熟的解決方案了,開(kāi)源的msm 就可以解決這個(gè)問(wèn)題。   

    官方給出的4 種序列化方案,其中kryo 是效率最高的,具體比較看官方地址:   

    http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies   

    下載地址:   

    http://code.google.com/p/memcached-session-manager/downloads/list   

    本次實(shí)驗(yàn)用的tomcat版本為6.0.18,以下為我用包,,誰(shuí)有需要可以聯(lián)系我,(高版本的自己測(cè)試如果不報(bào)錯(cuò),,就可以直接用)   

    kryo-1.03.jar   

    reflectasm-0.9.jar   

    minlog-1.2.jar   

    kryo-serializers-0.8.jar   

    memcached-2.5.jar   

    memcached-session-manager-tc7-1.5.1.jar   

    msm-kryo-serializer-1.5.1.jar   

    memcached-session-manager-1.5.1.jar   

    把以上8個(gè)包丟在tomcat的lib文件夾   

    修 改Tomcat的配置文件context.xml,調(diào)整成新的session存儲(chǔ)方式,在配置文件中<context>標(biāo)簽內(nèi)加入一下代碼 (如果memcached跟tomcat不在同一臺(tái)機(jī)器,修改127.0.0.1為memcached所在機(jī)器的IP):   

        

        

        

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   

    memcachedNodes="n1:127.0.0.1:11211"   

    sticky="false"   

    lockingMode="auto"   

    sessionBackupAsync="false"   

    sessionBackupTimeout="1000"   

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"   

    />   

    在tomcat/conf/logging.properties 文件中添加de.javakaffee.web.msm.level=FINE , 就可以在   

    catalina.out 的日志中看到詳細(xì)的session 存取情況。   

        

    一般前邊還有Nginx做轉(zhuǎn)發(fā),分發(fā)給不同機(jī)器的tomcat上面,,    tomcat集群(共享session)
 


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产熟女高清一区二区| 欧美韩国日本精品在线| 制服丝袜美腿美女一区二区| 91精品日本在线视频| 高清亚洲精品中文字幕乱码| 国产盗摄精品一区二区视频| 自拍偷女厕所拍偷区亚洲综合| 日本深夜福利在线播放| 97人妻精品一区二区三区免| 亚洲国产精品久久精品成人| 亚洲欧美国产网爆精品| 午夜视频免费观看成人| 国产精品尹人香蕉综合网| 欧美日韩乱一区二区三区| 99久只有精品免费视频播放| 欧美在线视频一区观看| 经典欧美熟女激情综合网| 精品人妻一区二区三区在线看| 国产成人精品资源在线观看| 精品推荐国产麻豆剧传媒| 真实国产乱子伦对白视频不卡 | 日韩免费av一区二区三区| 激情综合五月开心久久| 国产国产精品精品在线| 五月婷婷六月丁香狠狠| 亚洲欧美日产综合在线网| 精品日韩av一区二区三区| 午夜传媒视频免费在线观看| 国产成人av在线免播放观看av| 欧美成人欧美一级乱黄| 亚洲国产黄色精品在线观看| 色好吊视频这里只有精| 亚洲最新的黄色录像在线| 欧美日韩亚洲综合国产人| 国产日韩在线一二三区| 日本av在线不卡一区| 国产精品免费自拍视频| 激情偷拍一区二区三区视频| 日韩一区二区三区在线日| 国产精品久久久久久久久久久痴汉 | 熟女免费视频一区二区|