【问题标题】:Hazelcast - client mode topology / distributed map lock issueHazelcast - 客户端模式拓扑/分布式地图锁定问题
【发布时间】:2018-02-19 10:44:57
【问题描述】:

以下是我们在生产中遇到的问题的描述。请注意,我无法在测试或本地环境中重现该问题,因此无法为您提供测试代码。

我们有一个 hazelcast 集群,其中有两个成员 M1、M2 和三个客户端 C1、C2、C3。 Hazelcast 版本是 3.9。

客户端使用 IMap.tryLock() 方法,超时时间为 10 秒。获得锁后,执行关键和长时间运行的操作,最后使用 IMap.unlock() 方法释放锁。

生产中出现的问题如下:

在某个时刻 t,我们第一次看到客户端 C2 的 M2 心跳失败。之后com.hazelcast.spi.exception.TargetDisconnectedException导致获取分区表出错:

[hz.client_0.internal-2                       ] WARN  [] HeartbeatManager               - hz.client_0 [mygroup] [3.9] HeartbeatManager failed to connection: .....

[hz.client_0.internal-3                       ] WARN  [] ClientPartitionService         - hz.client_0 [mygroup] [3.9] Error while fetching cluster partition table!
java.util.concurrent.ExecutionException: com.hazelcast.spi.exception.TargetDisconnectedException: Heartbeat timed out to owner connection ClientConnection{alive=true, connectionId=1, ......

在初始心跳失败后大约 250 毫秒,客户端断开连接,然后在 20 毫秒内重新连接。

[hz.client_0.cluster-                         ] INFO  [] LifecycleService               - hz.client_0 [mygroup] [3.9] HazelcastClient 3.9 (20171023 - b29f549) is CLIENT_DISCONNETED

[hz.client_0.cluster-                         ] INFO  [] LifecycleService               - hz.client_0 [mygroup] [3.9] HazelcastClient 3.9 (20171023 - b29f549) is CLIENT_CONNECTED

我们遇到的问题是,对于一些以前被 C2 获取的键,C1 和 C3 无法获取锁,即使它似乎被 C2 释放了。 C2 可以获得锁,但这会造成无法接受的延迟 到应用程序并且是不可接受的..自从锁被释放后所有客户端都应该得到......

我们在收到投诉后被告知该问题,然后重新启动了客户端应用程序 C2。

http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Data_Structures/Lock.html 中所述,重新启动的成员(在我的情况下为 C2)获取的锁似乎在重新启动操作后被删除。

目前问题似乎已经消失,但我们不确定它是否会再次出现。

您对可能的原因有什么建议吗?更重要的是,您有什么建议吗?

是否会在此问题案例的客户端帮助中启用重做操作?

正如我试图解释的那样,客户端似乎恢复了问题,但密钥仍然锁定在集群中,这对我的应用程序来说是致命的。

谢谢

【问题讨论】:

  • 嗨,关于根本原因的任何建议?

标签: java locking hazelcast hazelcast-imap


【解决方案1】:

看起来客户端由于与集群断开连接而失去了锁的所有权。在您遇到的情况下,您可以使用IMap#forceUnlock API。不管锁的拥有者是谁,它都会释放锁,它总是成功解锁,从不阻塞,并立即返回。

【讨论】:

  • 嗨,Alparslan,我知道 forceUnlock 方法。但我猜这应该是最后的手段。您对问题的根本原因有任何想法吗?问候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2015-08-26
  • 2013-12-18
  • 1970-01-01
  • 2018-03-14
相关资源
最近更新 更多