【发布时间】:2020-12-02 11:18:29
【问题描述】:
我在远程 Ignite 集群上创建缓存 K、V 对时遇到一些问题。我的 Ignite 节点构建在 Java8 中的 Maven 项目上,通过多播配置进行集群,具有分区缓存。这里面临的问题是,只有在集群中恰好有 1 个节点时,ignite 才能通过 SqlFieldQuery 或 NoSQL 成功创建和检索缓存。当我将其扩展到超过 1(在本例中为 2)时,我会遇到远程服务器抛出的这个错误。
Caused by: org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException: Failed to map keys for cache (all partition nodes left the grid) [topVer=AffinityTopologyVersion [topVer=5, minorTopVer=3], cache=Transactions]
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.serverNotFoundError(GridPartitionedSingleGetFuture.java:711) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.mapKeyToNode(GridPartitionedSingleGetFuture.java:332) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.map(GridPartitionedSingleGetFuture.java:216) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.init(GridPartitionedSingleGetFuture.java:208) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedCache.getAsync(GridDhtColocatedCache.java:246) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4556) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4537) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1350) ~[ignite-core-2.6.0.jar:2.6.0]
at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:907) ~[ignite-core-2.6.0.jar:2.6.0]
这是我的服务器设置:
public class App
{
protected static IgniteConfiguration config;
protected static String igniteID = UUID.randomUUID().toString();
public static void main( String[] args )
{
System.out.println( "Starting instance of Ignite..." );
config = new IgniteConfiguration();
config.setIgniteInstanceName("ignite-node-"+igniteID);
config.setClientMode(false);
setupDiscoveryConfig();
setupDataConfig();
//cacheConfig();
config.setPeerClassLoadingEnabled(false);
config.setDeploymentMode(DeploymentMode.CONTINUOUS);
config.setPeerClassLoadingMissedResourcesCacheSize(0);
config.setFailureDetectionTimeout(10000);
config.setClientFailureDetectionTimeout(10000);
config.setNetworkTimeout(10000);
Ignite ignite = Ignition.start(config);
loadAndRemove(ignite);
}
private static void loadAndRemove(Ignite ignite) {
ignite.cluster().active();
IgniteCache<String, TransactionRecord> cache = ignite.getOrCreateCache("Transactions");
}
private static void cacheConfig(){
CacheConfiguration cacheConfig = new CacheConfiguration("Transactions");
cacheConfig.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
cacheConfig.setCacheMode(CacheMode.PARTITIONED);
config.setCacheConfiguration(cacheConfig);
}
private static void setupDataConfig(){
DataStorageConfiguration storageConfiguration = new DataStorageConfiguration();
storageConfiguration.getDefaultDataRegionConfiguration()
.setPersistenceEnabled(true);
config.setDataStorageConfiguration(storageConfiguration);
}
private static void setupDiscoveryConfig(){
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
((TcpDiscoveryMulticastIpFinder) ipFinder).setMulticastGroup("228.10.10.157");
ipFinder.setAddresses(Arrays.asList("127.0.0.1"));
spi.setIpFinder(ipFinder);
config.setDiscoverySpi(spi);
}
}
客户端配置如下图:
@Bean
public Ignite igniteInstance(){
IgniteConfiguration config = new IgniteConfiguration();
config.setIgniteInstanceName("cluster-client");
config.setClientMode(true);
config.setPeerClassLoadingEnabled(false);
config.setDeploymentMode(DeploymentMode.CONTINUOUS);
config.setPeerClassLoadingMissedResourcesCacheSize(0);
config.setFailureDetectionTimeout(10000);
config.setClientFailureDetectionTimeout(10000);
config.setNetworkTimeout(10000);
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
ipFinder.setMulticastGroup("228.10.10.157");
ipFinder.setAddresses(Arrays.asList("127.0.0.1"));
spi.setIpFinder(ipFinder);
config.setDiscoverySpi(spi);
return Ignition.getOrStart(config);
}
数据插入使用简单的 cache.put 命令。感谢是否有人可以帮助我解决这个问题。
【问题讨论】: