0

当多个成员从集群断开连接时,Hazelcast 失败。我的场景是如此基本,我的配置有 3 个 bakcup 选项(它不起作用)。我在一个集群中有 4 个成员,我使用 AtomicLong API 来保存我的 key->value。当所有成员都还活着时,一切都是完美的。但是,当我同时杀死 2 个成员(无需等待一段时间)时,会发生一些数据丢失。我的会员数总是4。有什么办法可以避免这种数据丢失?

  Config config = new Config();
  NetworkConfig network = config.getNetworkConfig();
  network.setPort(DistributedCacheData.getInstance().getPort());
  config.getCacheConfig("default").setBackupCount(3);
  JoinConfig join = network.getJoin();
  join.getMulticastConfig().setEnabled(false);
  join.getTcpIpConfig().setEnabled(true);  
  config.setNetworkConfig(network);
  config.setInstanceName("member-name-here");

谢谢。

4

1 回答 1

3

IAtomicLong 具有硬编码的 1 个同步备份,您不能将其配置为具有 1 个以上的备份。您正在做的是配置Cache3 个备份。

下面是一个示例,演示了多个成员断开连接IMap

Config config = new Config();
config.getMapConfig("myMap").setBackupCount(3);
HazelcastInstance[] instances = {
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config),
        Hazelcast.newHazelcastInstance(config)
};
IMap<Integer, Integer> myMap = instances[0].getMap("myMap");
for (int i = 0; i < 1000; i++) {
    myMap.set(i, i);
}
System.out.println(myMap.size());
instances[1].getLifecycleService().terminate();
instances[2].getLifecycleService().terminate();
System.out.println(myMap.size());
于 2019-12-11T15:55:55.320 回答