【问题标题】:ehcache client failover on terracottaterracotta 上的 ehcache 客户端故障转移
【发布时间】:2017-02-23 08:21:07
【问题描述】:

我正在尝试将 OSS Ehcache 与 terracotta 集群一起使用,但未能从 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。如果集群中有两台 terracotta 服务器,我想要 HA 和故障转移。 类似于 ActiveMQ 故障转移网址:

failover:(server1:port,server2:port)

我的问题:在开源 ehcache 中是否可能,或者我需要企业版,如果可能,如何配置。

更新

我试过了 &lt;terracotta:connection url="terracotta://host1:9510,host2:9610/clustered1"/&gt; 正如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+://([^\]\[/?#@]+@)?[^:?#/]+(:[1-9][0-9]{0,4})?(/[^\?#]*)?(\?[^#]*)?(#.*)?' for type 'connectionUrl'.

如果我尝试编译好的&lt;terracotta:connection url="terracotta://host1:9510/clustered1,host2:9610/clustered1"/&gt;,但如果 host1 出现故障,客户端会给出:

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

【问题讨论】:

    标签: ehcache failover terracotta


    【解决方案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> 
    

    列出所有服务器是推荐的方法,否则您需要非常准确地了解故障转移逻辑。

    【讨论】:

    • 谢谢,我按你说的试过了,编译成功了,但是第一台服务器宕机时故障转移没有成功,并且触发了connectionException:
    • 您的网址与我给出的示例不匹配。您在路径之前重复服务器,因为路径元素需要保持不变。所以terracotta://localhost:9610/clustered1,localhost:9510/c‌​lustered0需要变成terracotta://localhost:9610,localhost:9510/c‌​lustered
    • 我使用了 terracotta://host1:9510,host2:9510/clustered,但是在 xml 解析时失败,给出:XmlConfigurationException,我使用 IPs 而不是主机名。
    • 请将该信息添加到问题中,包括堆栈跟踪。它应该像宣布的那样工作。
    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2016-06-24
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多