2017-02-23 67 views
0

我想用赤土群集使用OSS Ehcache,但未能实现ehcache客户端的故障转移。赤土上的ehcache客户端故障转移

我看看这个配置,如文档here

<ehcache:service> 
<terracotta:cluster> 
    <terracotta:connection url="terracotta://localhost:9510/clustered"/> 
    <terracotta:server-side-config auto-create="true"> 
    <terracotta:default-resource from="default-resource"/> 
    </terracotta:server-side-config> 
</terracotta:cluster> 
</ehcache:service>  

中陈述,但这方面只接受一个URL。如果集群中有两台兵马俑服务器,我希望HA具有故障转移功能。 像ActiveMQ的故障切换网址:

failover:(server1:port,server2:port) 

我的问题:这有可能在开源的Ehcache,不然我就需要有企业版,如果可能的话,如何配置。

更新

我试图 <terracotta:connection url="terracotta://host1:9510,host2:9610/clustered1"/>Louis Jacomet提及,但,这并不正确解析,赠送:

org.ehcache.xml.exceptions.XmlConfigurationException: Error parsing XML configuration at file:/F:/Work/WORKSPACES/java7_ws/CachingTest/target/classes/ehcache.xml 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:167) 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:131) 
    at org.ehcache.jsr107.EhcacheCachingProvider$ConfigSupplier.getConfiguration(EhcacheCachingProvider.java:324) 
    ... 4 more 
Caused by: org.xml.sax.SAXParseException; systemId: file:/F:/Work/WORKSPACES/java7_ws/CachingTest/target/classes/ehcache.xml; lineNumber: 12; columnNumber: 91; cvc-pattern-valid: Value 'terracotta://host1:9510,host2:9610/clustered1' is not facet-valid with respect to pattern '\w+://([^\]\[/?#@][email protected])?[^:?#/]+(:[1-9][0-9]{0,4})?(/[^\?#]*)?(\?[^#]*)?(#.*)?' for type 'connectionUrl'. 

如果我尝试<terracotta:connection url="terracotta://host1:9510/clustered1,host2:9610/clustered1"/>其编译好,但如果主机1宕机,客户给出:

Exception in thread "main" org.ehcache.StateTransitionException: org.terracotta.connection.ConnectionException: java.util.concurrent.TimeoutException 
    at org.ehcache.core.StatusTransitioner$Transition.failed(StatusTransitioner.java:235) 
    at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:588) 
    at org.ehcache.jsr107.EhcacheCachingProvider.createCacheManager(EhcacheCachingProvider.java:148) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:128) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:79) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:183) 
    at dev.ams.poc.CacheApp.main(CacheApp.java:15) 
Caused by: java.lang.RuntimeException: org.terracotta.connection.ConnectionException: java.util.concurrent.TimeoutException 
    at org.ehcache.clustered.client.internal.service.DefaultClusteringService.initClusterConnection(DefaultClusteringService.java:189) 
    at org.ehcache.clustered.client.internal.service.DefaultClusteringService.start(DefaultClusteringService.java:140) 
    at org.ehcache.core.internal.service.ServiceLocator.startAllServices(ServiceLocator.java:118) 
    at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:560) 
    ... 5 more 

Ehcache版本:Ehcache-clustered-3.2

回答

1

此功能是开源产品的一部分,在那里没有问题。

你需要列出多个server:port在那里,如:

<ehcache:service> 
    <terracotta:cluster> 
    <terracotta:connection url="terracotta://localhost:9510,otherhost:9510/clustered"/> 
    <terracotta:server-side-config auto-create="true"> 
     <terracotta:default-resource from="default-resource"/> 
    </terracotta:server-side-config> 
    </terracotta:cluster> 
</ehcache:service> 

列出所有服务器是推荐的方式来走,否则就需要在故障转移逻辑的非常精确的了解。

+0

谢谢,我试过像你说的那样,它是编译好的,但当第一台服务器出现故障时,故障转移并没有成功,并且connectionException被触发:

+0

您的网址与我给出的示例不符。在路径元素需要保持不变的情况下,重复路径前的服务器。所以'terracotta:// localhost:9610/clustered1,localhost:9510/c lustered0'需要变成'terracotta:// localhost:9610,localhost:9510/c lustered' –

+0

我用兵马俑:// host1:9510 ,host2:9510/clustered,但在xml解析时失败,给出:XmlConfigurationException, 我使用IP而不是主机名。 –