日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

tomcat集群(共享session)

 集微筆記 2013-12-24


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

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

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

    通過上述的文字描述我們可以得知:   

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

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

    下面來實(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)聽配置文件地址
    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 #工作端口,若沒占用則不用修改
    worker.ajp13.host=localhost #本機(jī),若上面的Apache主機(jī)不為localhost,作相應(yīng)修改
    worker.ajp13.type=ajp13 #類型
    #worker.ajp13.lbfactor=1 #代理數(shù),不用修改

            

   

 

 


   

    集群配置 tomcat6
   

    第一種,simple tcp cluster (tomcat5以上版本自帶的基于tcp廣播技術(shù)的集群,這種方法比較簡單,只需修改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í)例來進(jìn)行集群的測試,那么請一定要注意tomcat實(shí)例運(yùn)行的端口和 集群所監(jiān)聽的端口是否沖突!   

   
     

   

   
    最后修改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)作都比較簡單,但實(shí)際在運(yùn)行過程中會(huì)出現(xiàn)一系列的問題,我這里列舉我在配置后使用過程中出現(xiàn)的一些問題和要點(diǎn),供大家參考:


 

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


 

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


 

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


 

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


 

      舉個(gè)簡單的例子,比如我們在單機(jī)應(yīng)用情況下修改SESSION中用戶的某一個(gè)數(shù)據(jù),那么通常就是:


 

   

     

           

  1.          

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


           

  2.        

  3.          

    User.setName(“my name”);


           

  4.      

   

 

 

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


 

   

     

           

  1.          

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


           

  2.      

   

 

 

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


 

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


 

   

     

           

  1.          

    route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0


           

  2.      

   

 

 

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


 


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

        

        

    第二種,使用memcached共享session   

    memcached-session-manager 配置   

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

    官方給出的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,以下為我用包,,誰有需要可以聯(lián)系我,(高版本的自己測試如果不報(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è)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多