3

我在使用apache作爲前端負載均衡器的ubuntu服務器上測試Tomcat Clusteringsession replication。從我的測試經驗來看,我認爲最好不要使用tomcat集羣,而是將每個節點作爲獨立運行,不知道沒有任何會話複製,因爲我覺得它很慢,需要很多時間來啓動tomcat服務並消耗更多的內存。並且FarmDeployer在部署中始終不可靠,整個配置應該放在<Host></Host>元素中,以便農場部署者工作,並且還要爲每個虛擬主機以及一個巨大的server.xml文件。下面是來自我使用的節點之一的集羣配置的tomcat虛擬主機。是tomcat集羣會話複製的唯一方式嗎?

<Host name="site1.mydomain.net" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
<Logger className="org.apache.catalina.logger.FileLogger" 
directory="logs" prefix="virtual_log1." suffix=".log" timestamp="true"/> 
<Context path="" docBase="/usr/share/tomcat/webapps/myapp" debug="0" reloadable="true"/> 

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> 
<Manager className="org.apache.catalina.ha.session.DeltaManager" 
      expireSessionsOnShutdown="false" 
      notifyListenersOnReplication="true"/> 

     <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
        address="192.168.1.8" 
        port="4001" 
        selectorTimeout="100" 
        maxThreads="6"/> 
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor"> 
       <Member className="org.apache.catalina.tribes.membership.StaticMember" 
         port="4002" 
         securePort="-1" 
         host="192.168.1.9" 
         domain="staging-cluster" 
         uniqueId="{0,1,2,3,4,5,6,7,8,9}"/> 

      <!-- <Member className="org.apache.catalina.tribes.membership.StaticMember" 
         port="4002" 
         securePort="-1" 
         host="192.168.1.9" 
         domain="staging-cluster" 
         uniqueId="{0,1,2,3,4,5,6,7,8,9}"/> --> 

      </Interceptor> 
     </Channel> 
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> 
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 

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

    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
      tempDir="/usr/share/tomcat/temp/" 
      deployDir="/usr/share/tomcat/webapps/" 
      watchDir="/usr/share/tomcat/watch/" 
      watchEnabled="true"/> 
    </Cluster> 
</Host> 

Tomcat集羣是否適合在生產環境中使用,或者是否有任何備用方式進行會話複製?或者我錯過了上述配置中可以很好調整的任何內容?

歡迎任何想法。謝謝!爲Tomcat

回答

6

一個會話的故障轉移/會話複製解決方案是memcached-session-manager(MSM),同時支持粘性和非粘性會話。 msm使用memcached(或任何說memcached協議的後端)作爲會話備份/存儲的後端。

在粘模會話仍保存在Tomcat和Memcached是僅作爲額外的備份 - 爲會話故障轉移。

在非粘性模式會話只存儲在分佈式緩存,並不再在Tomcat中,與非粘性會話的會話存儲必須是外部(以避免陳舊的數據)。

還有對membase/membase buckets的特殊支持,這對託管解決方案非常有用,您可以通過適當的身份驗證訪問某個存儲桶。

會話序列化是可插入的,所以你沒有綁定到java序列化(和實現Serializable的類)。例如。有一個kryo串行器可用,它是one of the fastest serialization strategies available

msm home page主要描述粘性會話的方法,有關非粘性會話的詳細信息,您可能會搜索或詢問mailing list

有關配置的詳細信息和示例可在msm wiki (SetupAndConfiguration)中找到。

+0

'memcached'是一個獨立的產品,就像tomcat的附加組件? – user465465 2012-02-01 06:58:11

+0

你可以閱讀這裏的memcached:http://memcached.org/about 您在一個或多個機器上安裝一個memcached服務器,客戶端可以設置/獲取/刪除緩存項。 memcached-session-manager(作爲tomcat會話管理器)則是一個客戶端在/從memcached中存儲/檢索會話。 – MartinGrotzke 2012-02-02 12:34:01

+0

在tomcat集羣上memcached是否高效? – user12458 2014-12-09 14:50:30