目前我在CPSubsystem.
-----
| I1* | * Leader
-----
---- ----
| I2 | | I3 |
---- ----
当所有实例都启动运行时,所有实例都已注册并相互查看,CPSubsystem一切都按预期工作。以下调用用于在所有实例之间执行分布式锁:
getHazelcastInstance().getCpSubsystem().getLock(lockDefinition.getLockEntryName())
当其中两个实例死亡时,我注意到一个问题,并且没有领导者或其他实例可用于执行领导者选举:
-----
| XXX | * DEAD
-----
---- -----
| I2 | | XXX | * DEAD
---- -----
正在运行的实例然后尝试获取分布式锁,但是请求冻结执行该getLock方法,导致请求排队几分钟(当实例成为子系统中的唯一实例时需要配置超时)。
我还注意到以下日志被永久打印:
2019-08-16 10:56:21.697 WARN 1337 --- [ration.thread-1] Impl$LeaderFailureDetectionTask(default) : [127.0.0.1]:5702 [dev] [3.12.1] We are FOLLOWER and there is no current leader. Will start new election round...
2019-08-16 10:56:23.737 WARN 1337 --- [cached.thread-8] c.h.nio.tcp.TcpIpConnectionErrorHandler : [127.0.0.1]:5702 [dev] [3.12.1] Removing connection to endpoint [127.0.0.1]:5701 Cause => java.net.SocketException {Connection refused to address /127.0.0.1:5701}, Error-Count: 106
2019-08-16 10:56:23.927 WARN 1337 --- [ration.thread-1] Impl$LeaderFailureDetectionTask(default) : [127.0.0.1]:5702 [dev] [3.12.1] We are FOLLOWER and there is no current leader. Will start new election round...
有没有办法识别实例现在是单独运行的,如果是这样,在获取新锁的过程中不要阻塞应用程序?
我一直在寻找某种机制来不以任何方式阻止应用程序的流程,即使应用程序单独运行我也会使用常规而j.u.c.l.ReentrantLock不是FencedLock.
海绵宝宝撒
慕码人2483693
相关分类