`
wenjinglian
  • 浏览: 806089 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

Ehcache集群使用

阅读更多

集群的事例是由别人提供(附件也提供下载,我将相关包已导入),我主要解释相关配置及注意事项

本事例采用的jgroups udp实现ehcache集群,下载下来找两台局域网的机器就能测试啦。

 

核心配置:

 

<ehcache updateCheck="false" dynamicConfig="false">

    <diskStore path="java.io.tmpdir/ehcache"/>

	<!-- mcast_addr=231.12.21.132; -->
	<cacheManagerPeerProviderFactory 
		class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
	    properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;bind_port=33433;ip_ttl=32;
	    mcast_send_buf_size=150000;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="::"
     />

    <defaultCache
        maxElementsInMemory="1000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        />
	     
    <cache name="mycache"
        maxElementsInMemory="10"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true">
        <cacheEventListenerFactory
	class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
		   properties="replicateAsynchronously=true, replicatePuts=true,
		   replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />		        
    </cache>

</ehcache>

 

参数解释:

 

mcast_addr:  组播地址;如果不设置默认为 228.8.8.8. (我的理解是就相当于是一个组,每个节点配置都一样)

mcast_port:  组播的发送端口;如是不设置默认为7600 

ip_ttl:  time-to-live 数据包在当前sokets中存活时间,默认为32s

 

bind_port:  当前节点传输端口,如果不配置系统随机分配。(官方配置没提供这个端口配置,如果采用随机分配对后面服务器部署防火墙策略不好控制

 

 

jgroups官方udp api: http://www.jgroups.org/javadoc/org/jgroups/protocols/UDP.html

 

public class UDP
extends TP
IP multicast transport based on UDP. Messages to the group (msg.dest == null) will be multicast (to all group members), whereas point-to-point messages (msg.dest != null) will be unicast to a single member. Uses a multicast and a unicast socket.

The following properties are read by the UDP protocol:
参数:
param mcast_addr - the multicast address to use; default is 228.8.8.8.
param mcast_port - (int) the port that the multicast is sent on; default is 7600
param ip_mcast - (boolean) flag whether to use IP multicast; default is true.
param ip_ttl - the default time-to-live for multicast packets sent out on this socket; default is 32.
param use_packet_handler - boolean, defaults to false. If set, the mcast and ucast receiver threads just put the datagram's payload (a byte buffer) into a queue, from where a separate thread will dequeue and handle them (unmarshal and pass up). This frees the receiver threads from having to do message unmarshalling; this time can now be spent receiving packets. If you have lots of retransmissions because of network input buffer overflow, consider setting this property to true.
 

在linux服务器部署 防火墙端口开放策略:

 mcast_port 与 bind_port 端口都要打开

/etc/sysconfig/iptables 配置:

 

[root@ldap apache-tomcat-7.0.12]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Sat Jul 21 13:57:58 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT 
-A INPUT -p udp --dport 33433 -j ACCEPT
-A INPUT -p udp --dport 45566 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
 

 

mcast_port :   -A INPUT -p udp --dport 33433 -j ACCEPT

bind_port: -A INPUT -p udp --dport 33433 -j ACCEPT

 

可能会碰到的问题:

java.lang.RuntimeException: the type of the stack (IPv6) and the user supplied addresses (IPv4) don't match: /231.12.21.132.

解决方案:http://nassir.iteye.com/blog/1602522

 

linux服务器配置使用命令:

 

  netstat -alu   查看所有udp端口

 

查看Linux下端口被哪个进程占用

  如:查看9425 被哪个程序占用

  lsof -i:9425

 

 

参考:

深入探讨在集群环境中使用 EhCache 缓存系统

http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/index.html

 

Ehcache详细解读

http://raychase.iteye.com/blog/1545906

 

官方jGroups集群配置

http://ehcache.org/documentation/replication/jgroups-replicated-caching

 

(原)EhCache 集群演示程序

http://www.oschina.net/question/12_3984

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics