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;
}
}
レプリケーションを機能させるには、追加する各ノードに1台のサーバーが必要ですか?または、2台のサーバーを4台のクライアント間で複製できますか? – blur0224
クライアント間のレプリケーションはなく、サーバー間でのレプリケーションしかありません。クライアントはサーバーノード上のキャッシュにアクセスできます。あなたはどんな問題を解決しましたか?あなたが追加の詳細を提供すると私は助けになるかもしれません。 –