EhCache集群方案-JGroups


EhCache 是一個純 Java 的進程內緩存框架。
由於 EhCache 是進程中的緩存系統,一旦將應用部署在集群環境中,每一個節點維護各自的緩存數據,當某個節點對緩存數據進行更新,這些更新的數據無法在其它節點中共享,這不僅會降低節點運行的效率,而且會導致數據不同步的情況發生。所以就需要用到 EhCache 的集群解決方案。
EhCache 從 1.7 版本開始,支持五種集群方案,分別是:
Terracotta 
RMI 
JMS 
JGroups 
EhCache Server

JGroups 提供了基於 TCP 的單播 ( Unicast ) 和基於 UDP 的多播 ( Multicast ) ,對應 RMI 的手工配置和自動發現。使用單播方式需要指定其它節點的主機地址和端口,下面是兩個節點,並使用了單播方式的配置:

<cacheManagerPeerProviderFactory
    class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
    properties="connect=TCP(start_port=7800):
        TCPPING(initial_hosts=host1[7800],host2[7800];port_range=10;timeout=3000;
        num_initial_members=3;up_thread=true;down_thread=true):
        VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):
        pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;
        retransmit_timeout=3000):
        pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;
        print_local_addr=false;down_thread=true;up_thread=true)"
     propertySeparator="::" />

使用多播方式配置如下:

<cacheManagerPeerProviderFactory
        class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
        properties="connect=UDP(mcast_addr=10.10.10.10;mcast_port=45566;ip_ttl=32; 
        mcast_send_buf_size=120000;mcast_recv_buf_size=80000): 
        PING(timeout=2000;num_initial_members=6): 
        MERGE2(min_interval=5000;max_interval=10000): 
        FD_SOCK:VERIFY_SUSPECT(timeout=1500): 
        pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000): 
        UNICAST(timeout=5000): 
        pbcast.STABLE(desired_avg_gossip=20000): 
        FRAG: 
        pbcast.GMS(join_timeout=5000;join_retry_timeout=2000; 
        shun=false;print_local_addr=true)"
        propertySeparator="::" />

JGroups 方式對應緩存節點的配置信息如下:

<cache name="EH_CACHE" maxElementsInMemory="1000000"
        eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0"
        overflowToDisk="true">
        <cacheEventListenerFactory
            class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
            properties="replicateAsynchronously=true, replicatePuts=true, 
            replicateUpdates=true, replicateUpdatesViaCopy=false, 
            replicateRemovals=true" />
    </cache>
使用組播方式的注意事項
使用 JGroups 需要引入 JGroups 的 Jar 包以及 EhCache 對 JGroups 的封裝包 ehcache-jgroupsreplication-xxx.jar 。
在一些啟用了 IPv6 的電腦中,經常啟動的時候報如下錯誤信息:
java.lang.RuntimeException: the type of the stack (IPv6) and the user supplied addresses (IPv4) don't match: /231.12.21.132.
解決的辦法是增加 JVM 參數:-Djava.net.preferIPv4Stack=true。如果是 Tomcat 服務器,可在 catalina.bat 或者 catalina.sh 中增加如下環境變量即可:
 SET CATALINA_OPTS=-Djava.net.preferIPv4Stack=true 
經過實際測試發現,集群方式下的緩存數據都可以在 1 秒鍾之內完成到其節點的復制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM