乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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ù)制!)   

                或者
          改變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è)人知識(shí)管理的網(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ā)表

        請遵守用戶 評論公約

        類似文章 更多