Jboss Datagrid 服务器 leveldb 缓存锁定 - 资源暂时不可用

Jboss Datagrid server leveldb cache lock - Resource temporarily unavailable

我是 运行 2 个 Jboss Datagrid 服务器实例,处于分布式模式下的 RHEL 中。我使用 leveldb 缓存存储作为我的 2 级缓存。这两个实例都应该使用相同的 leveldb 缓存存储路径,并且应该将 key/value 写入此路径。

/shared/usr/local/leveldb.

这是我的配置

(在数据目录中创建了一个软链接,以便leveldb路径指向两个服务器中的同一个共享目录)。

我在第二个实例中收到以下错误(第一个实例没有任何问题)。我在配置中使用 shared="true" 应该允许两个数据网格服务器访问相同的缓存存储。

2016-12-05 13:15:19,077 ERROR [org.jboss.msc.service.fail](MSC服务线程1-5)MSC000001:启动服务失败jboss.datagrid-infinispan.clustered.mycache : org.jboss.msc.service.StartException in service jboss.datagrid-infinispan.clustered.mycache: 启动服务失败 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 原因:org.infinispan.commons.CacheException:无法在 PersistenceManagerImpl 类型的对象上调用方法 public void org.infinispan.persistence.manager.PersistenceManagerImpl.start() 在 org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:172) 在 org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:864) 在 org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:633) 在 org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:622) 在 org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:547) 在 org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:238) 在 org.infinispan.cache.impl.CacheImpl.start(CacheImpl.java:877) 在 org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:637) 在 org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:587) 在 org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:452) 在 org.infinispan.manager.impl.AbstractDelegatingEmbeddedCacheManager.getCache(AbstractDelegatingEmbeddedCacheManager.java:133) 在 org.infinispan.server.infinispan.SecurityActions$5.run(SecurityActions.java:130) 在 org.infinispan.server.infinispan.SecurityActions$5.run(SecurityActions.java:127) 在 org.infinispan.security.Security.doPrivileged(Security.java:76) 在 org.infinispan.server.infinispan.SecurityActions.doPrivileged(SecurityActions.java:63) 在 org.infinispan.server.infinispan.SecurityActions.startCache(SecurityActions.java:135) 在 org.jboss.as.clustering.infinispan.subsystem.CacheService.start(CacheService.java:86) 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) ... 3 更多 原因:org.infinispan.commons.CacheException:无法启动缓存加载程序 在 org.infinispan.persistence.manager.PersistenceManagerImpl.start(PersistenceManagerImpl.java:174) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168) ... 还有 21 个 原因:org.infinispan.commons.CacheConfigurationException:无法打开数据库 在 org.infinispan.persistence.leveldb.LevelDBStore.start(LevelDBStore.java:108) 在 org.infinispan.persistence.manager.PersistenceManagerImpl.start(PersistenceManagerImpl.java:141) ... 还有 26 个 Caused by: org.fusesource.leveldbjni.internal.NativeDB$DBException: IO error: lock /shared/usr/local/leveldb/data/mycache/LOCK: 资源暂时不可用 在 org.fusesource.leveldbjni.internal.NativeDB.checkStatus(NativeDB.java:200) 在 org.fusesource.leveldbjni.internal.NativeDB.open(NativeDB.java:218) 在 org.fusesource.leveldbjni.JniDBFactory.open(JniDBFactory.java:168) 在 org.infinispan.persistence.leveldb.LevelDBStore.openDatabase(LevelDBStore.java:153) 在 org.infinispan.persistence.leveldb.LevelDBStore.start(LevelDBStore.java:104) ... 还有 27 个

无法共享 LevelDB 缓存存储,因为 LevelDB 本身并不打算共享。我创建了一个问题来确保在配置验证期间可以防止此类错误:https://issues.jboss.org/browse/ISPN-7286