未复制缓存分区

Cache partition not replicated

我有 2 个启用了持久性的节点。我像这样创建一个缓存

  // all the queues across the frontier instances
    CacheConfiguration cacheCfg2 = new CacheConfiguration("queues");
    cacheCfg2.setBackups(backups);
    cacheCfg2.setCacheMode(CacheMode.PARTITIONED);
    globalQueueCache = ignite.getOrCreateCache(cacheCfg2);

其中备份值大于 1

当其中一个节点死亡时,我得到

Exception in thread "Thread-2" javax.cache.CacheException: class org.apache.ignite.internal.processors.cache.CacheInvalidStateException: Failed to execute query because cache partition has been lostParts [cacheName=queues, part=2]
    at org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter.executeScanQuery(GridCacheQueryAdapter.java:597)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.applyx(IgniteCacheProxyImpl.java:519)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.applyx(IgniteCacheProxyImpl.java:517)
    at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
    at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3482)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:516)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:843)
    at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:418)
    at crawlercommons.urlfrontier.service.ignite.IgniteService$QueueCheck.run(IgniteService.java:270)
Caused by: class org.apache.ignite.internal.processors.cache.CacheInvalidStateException: Failed to execute query because cache partition has been lostParts [cacheName=queues, part=2]
    ... 9 more

我预计内容已被复制到另一个节点上。为什么不是这样?

很可能某处配置错误。检查以下内容:

  • 您没有使用现有缓存(将 getOrCreateCache 替换为 createCache
  • 您的服务器节点数没有超过备份因素
  • 检查日志中的“检测到丢失的分区”消息以及之前发生的事情