Hazelcast AtomicLong 多个成员离开时数据丢失
Hazelcast AtomicLong Data loss When multiple member left
当多个成员与集群断开连接时,Hazelcast 失败。
我的场景非常基本,我的配置有 3 个 bakcup 选项(它不起作用)。我在一个集群中有 4 个成员,我使用 AtomicLong API 来保存我的键->值。当所有成员都活着时,一切都是完美的。但是,当我同时杀死 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");
谢谢。
IAtomicLong 有硬编码的 1 个同步备份,你不能配置它有超过 1 个备份。您正在做的是使用 3 个备份配置 Cache
。
下面的示例演示了 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());
当多个成员与集群断开连接时,Hazelcast 失败。 我的场景非常基本,我的配置有 3 个 bakcup 选项(它不起作用)。我在一个集群中有 4 个成员,我使用 AtomicLong API 来保存我的键->值。当所有成员都活着时,一切都是完美的。但是,当我同时杀死 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");
谢谢。
IAtomicLong 有硬编码的 1 个同步备份,你不能配置它有超过 1 个备份。您正在做的是使用 3 个备份配置 Cache
。
下面的示例演示了 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());