Ehcache 集群配置
#此文件主要用于配置Redis和ehcache缓存
spring:
cache:
type: ehcache //① 缓存切换
ehcache:
path: e:\\temp
default-config-name: common-cache
cluster-enabled: true #②集群是否开启
cluster:
provider:
peer-discovery: manual
manual:
rmi-urls: 10.1.4.16:40002 #③缓存提供者需要通知的rmi地址 多个 | 分隔
listener:
host-name: 10.1.4.44 #④缓存监听者地址 默认:127.0.0.1
port: 40002 #⑤缓存监听者端口
socket-timeout-millis: 2000 #监听socket连接超时时间 默认2000毫秒
remote-object-port: 40001 #⑥远程对象绑定到注册表后接收调用的端口号
regions:
common-cache:
#Sets the maximum objects to be held in local heap memory (0 = no limit)
max-entries-local-heap: 0
#Sets the maximum number elements on Disk
max-entries-local-disk: 100000000
time-to-idle-seconds: 1800
time-to-live-seconds: 1800
#this is the size to allocate the DiskStore for a spool buffer
disk-spool-buffer-size-m-b: 30
#设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,
#如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断
eternal: false
#Sets the eviction policy
#Least Recently Used(最近最少使用). (ehcache默认值).
#缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,
#那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
memory-store-eviction-policy: LRU
#Sets the interval in seconds between runs of the disk expiry thread
disk-expiry-thread-interval-seconds: 120
注意:①来实现缓存的切换,目前支持“redis”与“ehcache”这两种缓存的切换。②实现是否启用集群模式的开关,true开启,false 不开启。③缓存提供者需要通知的rmi地址 多个 | 分隔。 ④缓存监听者地址 默认:127.0.0.1 ⑤缓存监听者端口。⑥远程对象绑定到注册表后接收调用的端口号,其他节点可以通过这个端口与当前节点上的ehcache 实例进行通信,以同步缓存数据、处理缓存更新。
配置项解析
配置项
|
配置项说明
|
provider.peer-discovery
|
成员发现方式:manual 手动发现
|
provider.manual.rmi-urls
|
指定需要同步的缓存节点,如果存在多个用|分隔,这个需要配置除它自己以外的所有需要同步的缓存节点信息,配置n-1个节点
|
listener.host-name
|
监听者主机地址
|
listener.port
|
监听者端口
|
listener.socket-timeout-millis
|
同步缓存的Socket超时时间
|
listener.remote-object-port | 远程对象绑定到注册表后接收调用的端口号,其他节点可以通过这个端口与当前节点上的ehcache 实例进行通信,以同步缓存数据、处理缓存更新。 |
问题描述:两台ehcache 组成的集群进行数据同步,两台节点之间可以PING 通,说明两个服务器之间的网络是通的。两台节点之间互相telnet 发现端口也是起来的,但是发送数据时,发送不成功。
问题一: 刚开始怀疑是因为rmi 的地址没有指定,排查后发现rmi 地址配置正常
问题二:第二个情况可能是防火墙的问题,经排查发现端口都没有开放
iptables -L -v -n
-L: 列出所有规则
-v: 详细模式,显示更多详细信息
-n: 以数字形式显示 IP 地址和端口号
防火墙开放端口40002、40001 命令
iptables -A INPUT -p tcp --dport 40002 -j ACCEPT
iptables -A INPUT -p tcp --dport 40001 -j ACCEPT
重新执行查询端口开发的信息
iptables -L -v -n
-L: 列出所有规则
-v: 详细模式,显示更多详细信息
-n: 以数字形式显示 IP 地址和端口号
在 INPUT 链中,查找 tcp dpt: 或 udp dpt: 后面的端口号。这些端口号表示已经开放的端口。
- tcp dpt:40002 表示 TCP 协议的 40002 端口已经开放。
- tcp dpt:40001 表示 TCP 协议的 40002 端口已经开放。