面对一个非常奇怪的场景,当多个成员从hazelcast集群中离开时,锁会意外地被释放。
场景:
具有5个节点A、B、C、D、E的簇,其中A是簇的第一个成员,然后是B、C、D、E。
节点D持有一个锁。节点E正在等待节点D锁定的相同的节点。
如果节点A、B、C一次离开集群,则节点D释放锁,其中D节点仍在启动和运行。由于集群中最老的成员,节点D已成为主节点。
为什么锁是由节点D释放的?
与SplitBrain条件有关吗?
如果一个节点( A、B、C中的任何一个节点)一个接一个地离开集群,那么一切都可以正常工作。节点D仍持有锁,E正在等待其可用。
配置
Config config = new Config();
config.getGroupConfig().setName("group-101");
NetworkConfig networkCOnfig = config.getNetworkConfig();
networkConfig.getJoin().getTcpIoConfig().setEnabled(true);
networkConfig.getJoin().getMulticastConfig().setEnabled(false);
networkConfig.getJoin().getAwsConfig().setEnabled(false);
networkConfig.setPort(5701);
networkConfig.getJoin().getTcpIpConfig().setMemebers(Arrays.asList("ip1","ip2"));
Hazelcast.newHazelcastInstance(config);发布于 2019-02-14 13:24:29
从文件中:
锁是安全的。如果一个成员持有一个锁,而其他一些成员被关闭,集群将确保您的锁是安全的和可用的。此外,当一个成员离开集群时,该死成员获得的所有锁都将被移除,以便这些锁立即可供活成员使用。
详见此处:https://docs.hazelcast.org/docs/3.11.1/manual/html-single/index.html#lock
https://stackoverflow.com/questions/54691212
复制相似问题