其他成员离开群集时释放了Hazelcast锁定

时间:2019-02-14 13:09:44

标签: hazelcast

面对一个非常奇怪的场景,当多个成员从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);

1 个答案:

答案 0 :(得分:0)

从文档中:

锁是故障安全的。如果一个成员持有一把锁而其他一些成员掉线,则群集将使您的锁安全且可用。此外,当某个成员离开群集时,该死成员获取的所有锁都将被删除,以便这些锁可立即用于活动成员。

有关详细信息,请参见此处:https://docs.hazelcast.org/docs/3.11.1/manual/html-single/index.html#lock