2017-08-14 167 views
1

我正在尝试使用客户端服务器模式评估Apache Ignite。我有一些使用Hazelcast和Infinispan的经验,所以我来自IMDG背景。在客户端 - 服务器模式下使用Apache Ignite

我在客户端 - 服务器模式下使用Ignite的最初经验并不十分流畅。我听起来很有见地,但我认为大多数高级用例都适合从嵌入式服务器模式的角度来看。

问:

我也有很多,但我出版这是我现在所面临现在的一个。我正在使用v2.1.0。我正在尝试利用Ignite的durable memory功能。所以我已经打开了我的服务器配置中的持久性,如文档中所述。

<property name="persistentStoreConfiguration"> 
    <bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/> 
</property> 

现在,当我尝试从一个客户端连接,用代码

Ignition.setClientMode(true); 

IgniteConfiguration cfg = new IgniteConfiguration(); 
//cfg.setPeerClassLoadingEnabled(true); 

TcpCommunicationSpi commSpi = new TcpCommunicationSpi(); 
commSpi.setSlowClientQueueLimit(1000); 

TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi(); 
TcpDiscoveryVmIpFinder ipfinder = new TcpDiscoveryVmIpFinder(); 
ipfinder.setAddresses(Arrays.asList("localhost")); 
discoverySpi.setIpFinder(ipfinder); 

cfg.setCommunicationSpi(commSpi); 
cfg.setDiscoverySpi(discoverySpi); 
ignite = Ignition.start(cfg); 
//ignite.active(true); 

CacheConfiguration<String, Person> config = new CacheConfiguration<>("Person"); 
config.setCacheMode(CacheMode.PARTITIONED); 
//config.setOnheapCacheEnabled(true); 
//config.setEvictionPolicy(new LruEvictionPolicy<>(2)); 

ignite.getOrCreateCache(config); 

我得到以下异常:

class org.apache.ignite.IgniteException: Can not perform the operation because the cluster is inactive. Note, that the cluster is considered inactive by default if Ignite Persistent Store is used to let all the nodes join the cluster. To activate the cluster call Ignite.activate(true). 
at org.apache.ignite.internal.IgniteKernal.checkClusterState(IgniteKernal.java:3712) 
at org.apache.ignite.internal.IgniteKernal.getOrCreateCache0(IgniteKernal.java:2837) 
at org.apache.ignite.internal.IgniteKernal.getOrCreateCache(IgniteKernal.java:2824) 

如果我设置ignite.activate(true),代码挂起(阻塞?等待?)。为什么我的客户(我认为)不作为数据节点参与,需要像一个行为一样?我在这里错过了什么吗?任何帮助,将不胜感激。

这是我在服务器上看到的异常。

[13:54:52] Topology snapshot [ver=5, servers=1, clients=0, CPUs=4, heap=0.13GB] 
[14:02:19] Topology snapshot [ver=6, servers=1, clients=1, CPUs=4, heap=1.9GB] 
[14:02:20] Default checkpoint page buffer size is too small, setting to an adjusted value: 1.6 GiB 
[14:02:20,446][SEVERE][exchange-worker-#34%null%][GridDhtPartitionsExchangeFuture] Failed to reinitialize local partitions (preloading will be stopped 
): GridDhtPartitionExchangeId [topVer=AffinityTopologyVersion [topVer=6, minorTopVer=1], nodeId=bccb36d2, evt=DISCOVERY_CUSTOM_EVT] 
java.lang.OutOfMemoryError 
     at sun.misc.Unsafe.allocateMemory(Native Method) 
     at org.apache.ignite.internal.util.GridUnsafe.allocateMemory(GridUnsafe.java:1054) 
     at org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider.nextRegion(UnsafeMemoryProvider.java:80) 
     at org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.start(PageMemoryImpl.java:276) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.startMemoryPolicies(IgniteCacheDatabaseSharedManag 
er.java:194) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.onActivate(IgniteCacheDatabaseSharedManager.java:9 
49) 
     at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.onActivate(GridCacheDatabaseSharedManager.java:459) 
     at org.apache.ignite.internal.processors.cache.GridCacheSharedContext.activate(GridCacheSharedContext.java:244) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onClusterStateChangeRequest(GridDhtPa 
rtitionsExchangeFuture.java:762) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture. 
java:574) 
     at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:19 
01) 
     at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 
     at java.lang.Thread.run(Thread.java:745) 
[14:02:20,478][SEVERE][exchange-worker-#34%null%][GridCachePartitionExchangeManager] Runtime error caught during grid runnable execution: GridWorker [ 
name=partition-exchanger, igniteInstanceName=null, finished=false, hashCode=1380507612, interrupted=false, runner=exchange-worker-#34%null%] 
java.lang.OutOfMemoryError 
     at sun.misc.Unsafe.allocateMemory(Native Method) 
     at org.apache.ignite.internal.util.GridUnsafe.allocateMemory(GridUnsafe.java:1054) 
     at org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider.nextRegion(UnsafeMemoryProvider.java:80) 
     at org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.start(PageMemoryImpl.java:276) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.startMemoryPolicies(IgniteCacheDatabaseSharedManag 
er.java:194) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.onActivate(IgniteCacheDatabaseSharedManager.java:9 
49) 
     at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.onActivate(GridCacheDatabaseSharedManager.java:459) 
     at org.apache.ignite.internal.processors.cache.GridCacheSharedContext.activate(GridCacheSharedContext.java:244) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onClusterStateChangeRequest(GridDhtPa 
rtitionsExchangeFuture.java:762) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture. 
java:574) 
     at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:19 
01) 
     at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 
     at java.lang.Thread.run(Thread.java:745) 
Exception in thread "exchange-worker-#34%null%" java.lang.OutOfMemoryError 
     at sun.misc.Unsafe.allocateMemory(Native Method) 
     at org.apache.ignite.internal.util.GridUnsafe.allocateMemory(GridUnsafe.java:1054) 
     at org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider.nextRegion(UnsafeMemoryProvider.java:80) 
     at org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImpl.start(PageMemoryImpl.java:276) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.startMemoryPolicies(IgniteCacheDatabaseSharedManag 
er.java:194) 
     at org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.onActivate(IgniteCacheDatabaseSharedManager.java:9 
49) 
     at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.onActivate(GridCacheDatabaseSharedManager.java:459) 
     at org.apache.ignite.internal.processors.cache.GridCacheSharedContext.activate(GridCacheSharedContext.java:244) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onClusterStateChangeRequest(GridDhtPa 
rtitionsExchangeFuture.java:762) 
     at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture. 
java:574) 
     at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:19 
01) 
     at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 
     at java.lang.Thread.run(Thread.java:745) 
[14:02:20,846][SEVERE][query-#174%null%][msg] Received message without registered handler (will ignore) [msg=GridCacheQueryRequest [id=3, cacheName=ig 
nite-sys-cache, type=SCAN, fields=false, clause=null, clsName=null, keyValFilter=null, rdc=null, trans=null, pageSize=1024, incBackups=false, cancel=f 
alse, incMeta=false, all=false, keepBinary=false, subjId=61cfa42e-40af-473d-a9f6-2fe249d66910, taskHash=0, part=-1, topVer=AffinityTopologyVersion [to 
pVer=6, minorTopVer=1], super=GridCacheIdMessage [cacheId=-2100569601]], node=61cfa42e-40af-473d-a9f6-2fe249d66910, locTopVer=AffinityTopologyVersion 
[topVer=-1, minorTopVer=0], msgTopVer=AffinityTopologyVersion [topVer=6, minorTopVer=1], desc=DynamicCacheDescriptor [deploymentId=4093bcfdd51-bae6026 
e-62b0-4189-854b-9efa4b8bf23f, staticCfg=true, sql=false, cacheType=UTILITY, template=false, updatesAllowed=true, cacheId=-2100569601, rcvdFrom=bccb36 
d2-2c8f-4642-b84d-63b5dd2ab93b, objCtx=null, rcvdOnDiscovery=false, startTopVer=AffinityTopologyVersion [topVer=6, minorTopVer=0], rcvdFromVer=Affinit 
yTopologyVersion [topVer=1, minorTopVer=0], clientCacheStartVer=null, schema=QuerySchema [], grpDesc=CacheGroupDescriptor [grpId=-2100569601, grpName= 
null, startTopVer=null, rcvdFrom=bccb36d2-2c8f-4642-b84d-63b5dd2ab93b, deploymentId=4093bcfdd51-bae6026e-62b0-4189-854b-9efa4b8bf23f, caches={ignite-s 
ys-cache=-2100569601}, rcvdFromVer=AffinityTopologyVersion [topVer=1, minorTopVer=0], cacheName=ignite-sys-cache], cacheName=ignite-sys-cache]] 
Registered listeners: 
+0

请充分分享日志和线程转储节点 –

+0

@EvgeniiZhuravlev我已经添加了服务器日志。我有一个服务器节点。还有一点,我以128米的最小/最大堆量启动了服务器。 –

回答

1

拓扑快照[版本= 5,服务器= 1,客户端= 0,CPU的= 4,堆= 0.13GB]

你已经开始Ignite服务器节点有过小堆内存(128MB),尝试增加它(参数-Xmx & -Xms)。

此外,默认情况下,Ignite尝试为计算机的所有物理内存分配0.8的pageMemory。因此,如果您想在同一台计算机上启动多个节点,则需要为节点配置MemoryPolicy。

检查这个documentation更多的信息和示例

+0

即使我用默认的1G启动它,仍然会得到相同的异常。 '[14:11:55]点火节点开始OK(id = beaa3252) [14:11:55]拓扑快照[ver = 1,servers = 1,clients = 0,CPUs = 4,堆= 1.0GB] [14:12:19]拓扑快照[版本= 2,服务器= 1,客户端= 1,CPU = 4,堆= 2.8GB] [14:12:20]默认检查点页面缓冲区大小太小,设置为调整值:1.6吉布 ' –

+0

这是JVM ARGS我使用,'ignite.bat -J-Xms128m -J-Xmx512m -J-XX:MaxDirectMemorySize = 512m' –

+0

添加信息来回答 –