2016-08-22 8 views
1

私は2つのクライアントと1つのサーバーを持っています。Apache Igniteレプリケートキャッシュはクライアント間で利用できません

私は両方のインスタンスが同じトークンキャッシュへのアクセス権を持っていると思いレプリケートされたキャッシュを作成している
[14:02:16] Topology snapshot [ver=8, servers=1, clients=2, CPUs=8, heap=7.8GB] 

、すなわちは1つのクライアントで追加されたトークンその他によって読み取られ、その逆のことができます。私はキャッシュを見たとき、私は実際に見ている何

private IgniteCache<Long, CacheToken> getOrCreateCache() { 
    CacheConfiguration<Long, CacheToken> tokenCacheConfig = new CacheConfiguration<>(REVOCATION_CACHE); 

    tokenCacheConfig.setCacheMode(CacheMode.REPLICATED); 
    tokenCacheConfig.setIndexedTypes(Long.class, CacheToken.class); 
    tokenCacheConfig.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.THIRTY_MINUTES)); 

    return ignite.getOrCreateCache(tokenCacheConfig); 
} 

は、同じ名前を持つ2つの別々のキャッシュが作成され、複製されませんされています。

Nodes for: TOKEN_REVOCATION_LIST(@c2) 
+==============================================================================================+ 
|  Node ID8(@), IP  | CPUs | Heap Used | CPU Load | Up Time | Size | Hi/Mi/Rd/Wr | 
+==============================================================================================+ 
| 0794F94D(@n2), xx.xx.xx.xx | 8 | 22.79 % | 0.03 % | 00:54:44:853 | 14 | Hi: 0  | 
|       |  |   |   |    |  | Mi: 0  | 
|       |  |   |   |    |  | Rd: 0  | 
|       |  |   |   |    |  | Wr: 0  | 
+----------------------------+------+-----------+----------+--------------+------+-------------+ 
| 7B9F7E25(@n1), xx.xx.xx.xx | 8 | 23.12 % | 0.13 % | 00:55:00:366 | 0 | Hi: 0  | 
|       |  |   |   |    |  | Mi: 0  | 
|       |  |   |   |    |  | Rd: 0  | 
|       |  |   |   |    |  | Wr: 0  | 
+----------------------------+------+-----------+----------+--------------+------+-------------+ 
| E7321C6D(@n0), xx.xx.xx.xx | 8 | 6.90 % | 0.03 % | 00:55:08:795 | 0 | Hi: 0  | 
|       |  |   |   |    |  | Mi: 0  | 
|       |  |   |   |    |  | Rd: 0  | 
|       |  |   |   |    |  | Wr: 0  | 
+----------------------------------------------------------------------------------------------+ 

私が期待している動作は、1つの共有キャッシュ、または少なくともトークンがノード間で複製されていることです。各ノード内から、ノードが書き込んだ値を読むことができますが、ノード間では読み取れません。

共有レプリケートキャッシュを実行するには、どのような設定を変更する必要がありますか?これの例はありますか?

@Configuration 
public class IgniteConfig { 

@Bean 
public Ignite ignite() { 
    return Ignition.start(igniteConfiguration()); 
} 

@Bean 
public JdbcDataSource h2ExampleDb() { 
    JdbcDataSource ds = new JdbcDataSource(); 
    ds.setURL("jdbc:h2:tcp://localhost/mem:ExampleDb"); 
    ds.setUser("sa"); 
    return ds; 
} 

@Bean 
public IgniteConfiguration igniteConfiguration() { 
    IgniteConfiguration ic = new IgniteConfiguration(); 
    ic.setClientMode(true); 
    ic.setPeerClassLoadingEnabled(true); 
    ic.setIncludeEventTypes(getEventTypes()); 
    ic.setDiscoverySpi(discoverySpi()); 
    ic.setCacheConfiguration(cacheConfiguration()); 
    return ic; 
} 

public CacheConfiguration cacheConfiguration() { 
    CacheConfiguration cc = new CacheConfiguration(); 
    cc.setCacheMode(CacheMode.REPLICATED); 
    return cc; 
} 

public int[] getEventTypes() { 
    int[] eventTypes = { 
      EventType.EVT_TASK_STARTED, 
      EventType.EVT_TASK_FINISHED, 
      EventType.EVT_TASK_FAILED, 
      EventType.EVT_TASK_TIMEDOUT, 
      EventType.EVT_TASK_SESSION_ATTR_SET, 
      EventType.EVT_TASK_REDUCED, 
      EventType.EVT_CACHE_OBJECT_PUT, 
      EventType.EVT_CACHE_OBJECT_READ, 
      EventType.EVT_CACHE_OBJECT_REMOVED, 
      EventType.EVT_CLIENT_NODE_RECONNECTED, 
      EventType.EVT_CACHE_OBJECT_EXPIRED 
    }; 

    return eventTypes; 
} 

@Bean 
public TcpDiscoverySpi discoverySpi() { 
    TcpDiscoverySpi spi = new TcpDiscoverySpi(); 
    spi.setIpFinder(tdif()); 
    return spi; 
} 

@Bean 
public TcpDiscoveryMulticastIpFinder tdif() { 
    TcpDiscoveryMulticastIpFinder finder = new TcpDiscoveryMulticastIpFinder(); 
    List<String> addresses = new ArrayList<>(); 
    addresses.add("127.0.0.1:47500..47509"); 
    finder.setAddresses(addresses); 
    return finder; 
} 
} 

答えて

4

クライアントノードは、分散キャッシュ(複製またはパーティション)のデータを格納しません。サーバーノードが1つしかないため、レプリカは1つだけです。より多くのサーバーノードを起動するだけで、すべてのサーバーノードでキャッシュが複製されることがわかります。

+0

レプリケーションを機能させるには、追加する各ノードに1台のサーバーが必要ですか?または、2台のサーバーを4台のクライアント間で複製できますか? – blur0224

+0

クライアント間のレプリケーションはなく、サーバー間でのレプリケーションしかありません。クライアントはサーバーノード上のキャッシュにアクセスできます。あなたはどんな問題を解決しましたか?あなたが追加の詳細を提供すると私は助けになるかもしれません。 –

関連する問題