面对一个非常奇怪的场景,当多个成员从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);
答案 0 :(得分:0)
从文档中:
锁是故障安全的。如果一个成员持有一把锁而其他一些成员掉线,则群集将使您的锁安全且可用。此外,当某个成员离开群集时,该死成员获取的所有锁都将被删除,以便这些锁可立即用于活动成员。
有关详细信息,请参见此处:https://docs.hazelcast.org/docs/3.11.1/manual/html-single/index.html#lock