Infinispan 初始状态传输超时
Posted
技术标签:
【中文标题】Infinispan 初始状态传输超时【英文标题】:Infinispan initial state transfer timout 【发布时间】:2020-05-30 17:10:03 【问题描述】:我正在为两个节点(server1 和 server2)设置复制的 infinispan(9.4.16.Final,Wildfly 18.1)缓存,我遇到了初始状态传输在启动时超时的问题。这只发生在我升级我的应用程序时。
ERROR [2020-02-14 21:54:47,870] [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-13,ejb,server1) ISPN000474: Error processing request 2017@server2
ERROR [2020-02-14 21:54:47,876] [thread-13,ejb,server1] [transport.jgroups.JGroupsTransport] [] - ISPN000474: Error processing request 2020@server2
ERROR [2020-02-14 20:49:54,732] [org.jboss.msc.service.fail] (ServerService Thread Pool -- 90) MSC000001: Failed to start service org.wildfly.clustering.infinispan.cache.mycontainer.mycache: org.jboss.msc.service.StartException in service org.wildfly.clustering.infinispan.cache.mycontainer.mycache: org.infinispan.commons.CacheException: Initial state transfer timed out for cache mycache on server1
at org.wildfly.clustering.service@18.0.1.Final//org.wildfly.clustering.service.FunctionalService.start(FunctionalService.java:70)
at org.wildfly.clustering.service@18.0.1.Final//org.wildfly.clustering.service.AsyncServiceConfigurator$AsyncService.lambda$start$0(AsyncServiceConfigurator.java:117)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: org.infinispan.commons.CacheException: Initial state transfer timed out for cache mycache on server1
at org.infinispan@9.4.16.Final//org.infinispan.statetransfer.StateTransferManagerImpl.waitForInitialStateTransferToComplete(StateTransferManagerImpl.java:238)
at org.infinispan@9.4.16.Final//org.infinispan.cache.impl.CacheImpl.start(CacheImpl.java:1113)
at org.infinispan@9.4.16.Final//org.infinispan.cache.impl.AbstractDelegatingCache.start(AbstractDelegatingCache.java:511)
at org.infinispan@9.4.16.Final//org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:657)
at org.infinispan@9.4.16.Final//org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:601)
at org.infinispan@9.4.16.Final//org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:484)
at org.infinispan@9.4.16.Final//org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:468)
at org.infinispan@9.4.16.Final//org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:454)
at org.jboss.as.clustering.infinispan@18.0.1.Final//org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:83)
at org.wildfly.clustering.infinispan.spi@18.0.1.Final//org.wildfly.clustering.infinispan.spi.service.CacheServiceConfigurator.get(CacheServiceConfigurator.java:77)
at org.wildfly.clustering.infinispan.spi@18.0.1.Final//org.wildfly.clustering.infinispan.spi.service.CacheServiceConfigurator.get(CacheServiceConfigurator.java:55)
at org.wildfly.clustering.service@18.0.1.Final//org.wildfly.clustering.service.FunctionalService.start(FunctionalService.java:67)
... 7 more
ERROR [2020-02-14 21:54:47,864] [Controller Boot Thread] [as.controller.management-operation] [] - WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "infinispan"),
("cache-container" => "mycontainer"),
("replicated-cache" => "mycache"),
("component" => "backups")
]) - failure description: "WFLYCTL0080: Failed services" => "org.wildfly.clustering.infinispan.cache.mycontainer.mycache" => "org.infinispan.commons.CacheException: Initial state transfer timed out for cache mycache on server1
Caused by: org.infinispan.commons.CacheException: Initial state transfer timed out for cache mycache on server1"
我的配置:
<cache-container name="mycontainer">
<transport/>
<replicated-cache name="mycache">
<locking acquire-timeout="30000" isolation="REPEATABLE_READ"/>
<expiration interval="60000" lifespan="1200000" max-idle="-1"/>
<file-store/>
</replicated-cache>
</cache-container>
有人可以帮忙吗?我花了几个小时试图解决这个问题,但没有任何运气。谢谢!
【问题讨论】:
嗨,史蒂夫,您所说的“在我升级应用程序时发生”是什么意思? 嗨迭戈。这是我升级到新版本的时候(即新的 ear 版本,但 infinispan 版本保持不变)。 【参考方案1】:你有两个选择:
1-增加timeout
或
2- 设置await-initial-transfer="false"
<replicated-cache name="mycache">
<locking acquire-timeout="30000" isolation="REPEATABLE_READ"/>
<expiration interval="60000" lifespan="1200000" max-idle="-1"/>
<file-store/>
<state-transfer enabled="true" timeout="60000" await-initial-transfer="false"/>
</replicated-cache>
```
【讨论】:
感谢您的回答。我设置了 await-initial-transfer=false 并且服务器现在开始了,这是以前没有的。 现在,问题是,当我对“server1”和“server2”进行滚动升级时,在服务器运行不同版本期间无法复制缓存条目.原因:org.jboss.modules.ModuleNotFoundException: deployment.myapplication-1.0.ear 在这个例子中,“server2”给出了这个错误,“server1”正在运行 deployment.myapplication-1.1.ear(升级后)。这会导致缓存条目在升级期间丢失。我是否正在尝试做一些 infinispan 不支持的事情?这不是 jboss 缓存的问题。 嗨,史蒂夫,您所说的“服务器正在运行不同的版本”是什么意思?此外,“这会导致升级期间缓存条目丢失”。您的意思是缓存条目将为空,稍后它将具有最新值? 嗯,缓存大小是多少MB? 嗨迭戈。对不起,我没有很好地解释这一点。这些服务器正在运行不同版本的已部署耳朵,因为我正在进行滚动升级以保持其中一个始终可用。代码没有改变,但它已经被重新编译并且有一个稍微更新的版本(myapplication-1.0.0.0.ear -> myapplication-1.0.0.1.ear)。出于某种原因,infinispan 不喜欢耳朵有不同的版本并且无法复制缓存条目。缓存并不大,当它们少于 10 个条目时我遇到了这个问题。【参考方案2】:我通过从部署的耳朵中删除版本来解决这个问题。当模块名称不完全匹配时,Infinispan 无法(可能是设计使然)复制缓存条目。在我看来,删除版本并不是一个理想的解决方案,但它可以完成工作。删除版本后,初始状态传输超时错误就停止了。
【讨论】:
【参考方案3】:使用 infinispan 集群,在这种情况下还需要注意另一种情况,尤其是在缓存 org.infinispan.CONFIG 上。一旦缓存 org.infinispan.CONFIG 的状态传输超时。集群中很可能存在导致该问题的节点。尝试查找哪个节点未能请求缓存 org.infinispan.CONFIG 的状态,然后重新启动该节点。 org.infinispan.statetransfer.InboundTransferTask 上很可能会有警告。
【讨论】:
以上是关于Infinispan 初始状态传输超时的主要内容,如果未能解决你的问题,请参考以下文章
JBoss EAP 6.1 的 Infinispan 超时异常